加拿大邮政编码验证

64

我需要使用 C# (.NET) 正则表达式来验证加拿大邮政编码(例如,M4B 1C7)。

7个回答

107

加拿大邮政编码不能包含字母D、F、I、O、Q或U,也不能以W或Z开头:

[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]
如果你想要在中间添加一个可选的空格:
[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ] ?[0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]

6
“加拿大邮政编码不能使用某些字母”,顺便提一下,第一个字母的限制更多,其次是第二和第三个字母。+1 - Richard McGuire
8
理想情况下,您应该忽略输入中的空格,并将数据规范化为标准格式进行存储。这样,人们可以输入带有或不带有空格的邮政编码,而不会产生影响。如果需要,您可以对它们进行格式化以供输出。 - Rob
2
第一个序列中不应该有F,您可以在此处检查:http://www.infinitegravity.ca/postalcodeformat.htm 进行验证。 - Tilendor
1
如果你想让空格可选,可以在其后加一个问号。 - GalacticCowboy
注意,这些正则表达式没有考虑尾随或前导字符;也不会检查长度。如果这对您很重要,应该在正则表达式前面加上"^"并在末尾添加"$",以断言从字符串的开始到结束的匹配是一个有效的邮政编码。例如:^[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ] ?[0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]$ - Tyler
显示剩余3条评论

5
以下是规则: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
我建议如下:

我建议采取以下措施:

bool FoundMatch = false;
try {
    FoundMatch = Regex.IsMatch(SubjectString, "\\A[ABCEGHJKLMNPRSTVXY]\\d[A-Z] ?\\d[A-Z]\\d\\z");
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}

我已经修改了我的答案,根据http://www.infinitegravity.ca/postalcodeformat.htm的要求,排除了第一个字符中的无效字母。 - Templar
3
如果您不想为每个斜杠输入两个反斜杠,请使用@字符串字面量,例如@"\A[ABCEGHJKLMNPRSTVXY]\d[A-Z] ?\d[A-Z]\d\z" - cdmckay

1

试试这个:

function postalCodeCheck (postalCode, type) {

    if (!postalCode) {
        return null;
    }

    postalCode = postalCode.toString().trim();

    var us = new RegExp("^\\d{5}(-{0,1}\\d{4})?$");
   // var ca  = new RegExp(/^((?!.*[DFIOQU])[A-VXY][0-9][A-Z])|(?!.*[DFIOQU])[A-VXY][0-9][A-Z]\ ?[0-9][A-Z][0-9]$/i);
    var ca = new RegExp(/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ]( )?\d[ABCEGHJKLMNPRSTVWXYZ]\d$/i);

    if(type == "us"){
        if (us.test(postalCode.toString())) {
            console.log(postalCode);
            return postalCode;
        }
    }

    if(type == "ca")
    {
        if (ca.test(postalCode.toString())) {
            console.log(postalCode);
            return postalCode;
        }
    }

    return null;
}

这是 JavaScript,不是 C#。原帖询问的是 C#。 - Louise Eggleton

1

类似这样:

^[A-Z]\d[A-Z] \d[A-Z]\d$

-1

加拿大邮政的链接已经失效。 - But those new buttons though..
https://www.canadapost.ca/pca/ 是加拿大邮政验证功能的起始链接。这是一个非常棒的工具,提供免费试用。 - ransems

-4
class Program
{
    static void Main(string[] args)
    {
        string c1;
        string c2;
        string c3;
        string c4;
        string c5;
        string c6;
        string c7;
        int sortie;
        bool parfais = true;


        Console.WriteLine("entrer votre code postal");
        string cp = Console.ReadLine();
        if (cp.Length == 7)
        {

            c1 = cp.Substring(0, 1);
            c2 = cp.Substring(1, 1);
            c3 = cp.Substring(2, 1);
            c4 = cp.Substring(3, 1);
            c5 = cp.Substring(4, 1);
            c6 = cp.Substring(5, 1);
            c7 = cp.Substring(6, 1);



            if (int.TryParse(c1, out sortie))
            {
                parfais = false;
                Console.WriteLine("le 1er caratere doit etre une lettre");
            }

            if (int.TryParse(c2, out sortie) == false)
            {
                parfais = false;
                Console.WriteLine("le 2e caratere doit etre un nombre");
            }

            if (int.TryParse(c3, out sortie))
            {
                parfais = false;
                Console.WriteLine("le 3e caratere doit etre une lettre");
            }



            if (c4.Contains(" ") == false)
            {
                parfais = false;
                Console.WriteLine("vous devez utiliser un espace");
            }



            if (int.TryParse(c5, out sortie) == false)
            {
                parfais = false;
                Console.WriteLine("le 5e caratere doit etre un nombre");
            }

            if (int.TryParse(c6, out sortie))
            {
                parfais = false;
                Console.WriteLine("le 6e caratere doit etre une lettre");
            }

            if (int.TryParse(c7, out sortie) == false)
            {
                 parfais = false;
                Console.WriteLine("le 7e caratere doit etre un nombre");
            }

            else if(parfais == true)
            {
                Console.WriteLine("code postal accepter");
                Console.ReadLine();
            }


       }

            else
            {
                Console.WriteLine("le code postal doit contenir 7 caratere incluant l'espace");

            }


        Console.ReadLine();

1
OP想要使用正则表达式,但是这个答案中没有任何正则表达式。 - Erick G. Hagstrom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接