Validation Du Code Postal Canadien Regex

j'ai un script écrit en JavaScript pour valider les Codes postaux canadiens en utilisant Regex, mais il ne semble pas fonctionner. Voici le script:

Si la déclaration:

if (myform.zip.value == "" || myform.zip.value == null || myform.zip.value == "Postal Code" || myform.zip.value.length < 12 ) {
    alert("Please fill in field Postal Code. You should only enter 7 characters");
    myform.zip.focus();
    return false;
  }

Fonction:

function okNumber(myform) {
  var regex = /^[ABCEGHJKLMNPRSTVXY]{1}d{1}[A-Z]{1} *d{1}[A-Z]{1}d{1}$/;
  if (regex.test(myform.zip.value) == false) {
    alert("Input Valid Postal Code");
    myform.zip.focus();
    return false;
  }

  return true;
}
10
demandé sur Alex Block 2012-06-22 07:07:15

7 réponses

cela fonctionne pour tous les codes postaux canadiens..

^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$
4
répondu Balram Singh 2013-01-10 13:56:47

une approche regex peut valider le format d'un code postal Canadien, mais il ne suffit pas de garantir que le code postalexiste.

Par exemple: A9A 0A0regarde comme un code postal canadien valide, mais la zone de tri vers l'avant A9An'existe pas réellement.

Etes-vous sûr que vous ne préféreriez pas faire une sorte de recherche contre une liste officielle de codes postaux?

3
répondu Li-aung Yip 2012-06-22 03:17:25

Voici les règles http://en.wikipedia.org/wiki/Postal_code#Reserved_characters

ABCEGHJKLMNPRSTVXY <-- letter used 
DFIOQU <-- letters not used because it mixes up the reader
WZ     <-- letters used but not in the first letter
With that in mind the following in the proper regex

@[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][\s][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]
2
répondu user3111634 2013-12-20 14:42:55

la première erreur est la dernière condition de votre déclaration if initiale. myform.zip.value.length < 12 doit toujours être vrai, alors cette partie de votre code sera toujours en alerte, le message "Please fill in field Postal Code. You should only enter 7 characters" et prendre le focus de retour à l' zip champ. Étant donné qu'un code postal valide comporte un maximum de 7 caractères, il devrait être remplacé par myform.zip.value.length > 7.

après cette correction, le code postal T2X 1V4 que vous avez fournies dans les commentaires valide. Cependant, l'expression régulière que vous avez utilisé peut être simplifiée (comme a également été mentionné dans les commentaires). Vous pouvez supprimer toutes les occurrences de {1} puisqu'ils sont redondants. Vous avez probablement aussi voulu suivre l'espace avec un ? au lieu d'un *. ? signifie que le caractère ou l'expression précédente peut apparaître 0 ou 1 fois, alors qu'un * signifie qu'il peut apparaître 0 ou plus fois. Je pense que vous voulez au plus un espace dans vos codes postaux.

voici le code de travail complet que j'ai testé avec:

<!doctype html>
<html>
<head>
    <title>JavaScript Regex Tester</title>
    <meta charset="utf-8">
    <script>
        function validate(myform) {
            if (myform.zip.value == "" || myform.zip.value == null || myform.zip.value == "Postal Code" || myform.zip.value.length > 7 ) {
                alert("Please fill in field Postal Code. You should only enter 7 characters");
                myform.zip.focus();
                return false;
            }

            return okNumber(myform);
        }

        function okNumber(myform) {
            var regex = /^[ABCEGHJKLMNPRSTVXY]\d[A-Z] *\d[A-Z]\d$/;
            if (regex.test(myform.zip.value) == false) {
                alert("Input Valid Postal Code");
                myform.zip.focus();
                return false;
            }

            return true;
        }
    </script>
</head>
<body>
    <form action="#" name="myform" method="post">
        <input type="text" name="zip" value="Postal Code" />
        <input type="button" value="Submit" onclick="validate(document.myform);"/>
    </form>
</body>
</html>

une dernière note, habituellement quand vous voyez [A-Z] dans une expression régulière, cela vaut au moins la peine de se demander si cela devrait être [A-Za-z] pour accepter les lettres majuscules ou minuscules. Je ne sais pas si c'est le cas pour les codes postaux Canadiens, mais c'est habituellement le cas que la plupart des formulaires doivent accepter l'un ou l'autre et corriger le cas au besoin.

0
répondu Bill the Lizard 2012-07-03 02:23:54

C'est une expression valide pour un Code Postal Canadien que j'utilise. Le format sera strictement A0A 0A0.

/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d$/
0
répondu Jessica Mather 2016-07-05 20:30:57

Ce sera pour code postal Canadien:

/^[a-z][0-9][a-z][- ]?[0-9][a-z][0-9]$/i

il permettra le format approprié X#X #X avec un espace ou un trait d'Union.

0
répondu Creeperstanson 2016-09-27 21:53:38

la Solution pour vous répondre, il vous aidera, je l'espère. Merci pour votre temps

string[] inputName = new string[5];
    string[] inputId = new string[5];
    string[] inputMarks = new string[5];

    Regex StudentId = new Regex(@"\d\d\d\d\d$");
    Regex Marks = new Regex(@"\d\d$");
    Regex StudentName = new Regex(@"^([a-zA-z\s]{5,10})$");

    private void btnClear_Click(object sender, EventArgs e)
    {
        rtShowAll.Clear();

    }

    private void btnAdd_Click(object sender, EventArgs e)
    {
        string Name = txtLastName.Text;
        string id = txtStudentId.Text;
        string marks = txtMarks.Text;

        if ((Name == "") || (!StudentName.IsMatch(Name)))
        {
            MessageBox.Show("space cannot be empty and enter valid characters only");
        }

        else if (Name != "")
        {
            if ((id == null) || (StudentId.IsMatch(id)))
            {
                MessageBox.Show("Enter valid id");
            }
            else if ((id != null) || (StudentId.IsMatch(id)))
            {
                if ((marks == null) || (!Marks.IsMatch(marks)))
                {
                    MessageBox.Show("enter valid marks");
                }

                else if ((marks != null) || (Marks.IsMatch(marks)))
                {
                    for (int i = 0; i <= 5; i++)
                    {
                        inputName[i] = Name;
                        inputId[i] = id;
                        inputMarks[i] = marks;
                        break;
                    }
                }

            }
        }
        txtLastName.Clear();
        txtMarks.Clear();
        txtStudentId.Clear();

    }

    private void btnShowAll_Click(object sender, EventArgs e)
    {


        string result = "";
        for (int i = 0; i <= 5; i++)
        {
            result = inputName[i] + "   " + inputId[i] + "   " + inputMarks[i];
            rtShowAll.Text = result;
            break;
        }

       //list.Add(rtShowAll.Text);
        //string Showall = "";
       // foreach (string s in list)
      // {
       //    Showall += s + " "+ "\n";
        //}
       // rtShowAll.Text = Showall;
    }

    private void btnSearch_Click(object sender, EventArgs e)
    {
        string searchId = txtStudentId.Text;
        string result = "";

        txtStudentId.Text = searchId;

        for (int i = 0; i < 5; i++)
        {
            if (searchId == inputId[i])
            {
                result = inputName[i] + "    " + inputMarks[i];
                rtSearch.Text = result;
            }
            else if (searchId != inputId[i])
            {
                MessageBox.Show("Enter valid Student id");
            }
        }
    }

    private void btnModify_Click(object sender, EventArgs e)
    {
        string id = txtStudentId.Text;
        string newmarks = "";

        for (int i = 0; i < 5; i++)
        {
            if (id == inputId[i])
            {
                newmarks = txtMarks.Text;
                if ((newmarks == null) || (!Marks.IsMatch(newmarks)))
                {
                    MessageBox.Show("enter valid marks");
                }
                else if ((newmarks != null || (Marks.IsMatch(newmarks))))
                {
                    inputMarks[i] = newmarks;
                    MessageBox.Show("marks has been modified");
                }
            }
        }
    }
}

}

0
répondu Alexander 2018-06-28 22:48:19