C#-验证美国或加拿大邮政编码

C#-验证美国或加拿大邮政编码,c#,asp.net,.net,C#,Asp.net,.net,我使用下面的方法来验证美国或加拿大的邮政编码,但我认为这对我来说并不合适。请告诉我正则表达式的变化 private bool IsUSorCanadianZipCode(string zipCode) { bool isValidUsOrCanadianZip = false; string pattern = @"^\d{5}-\d{4}|\d{5}|[A-Z]\d[A-Z] \d[A-Z]\d$"; Regex regex = new

我使用下面的方法来验证美国或加拿大的邮政编码,但我认为这对我来说并不合适。请告诉我正则表达式的变化

private bool IsUSorCanadianZipCode(string zipCode)
    {
        bool isValidUsOrCanadianZip = false;
        string pattern = @"^\d{5}-\d{4}|\d{5}|[A-Z]\d[A-Z] \d[A-Z]\d$";
        Regex regex = new Regex(pattern);
        return isValidUsOrCanadianZip = regex.IsMatch(zipCode);
    }

谢谢。

如果您使用的是数据注释验证器,您可以使用如下RegularExpression属性:

    var _usZipRegEx = @"^\d{5}(?:[-\s]\d{4})?$";
    var _caZipRegEx = @"^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$";

    private bool IsUSOrCanadianZipCode(string zipCode)
    {
        var validZipCode = true;
        if ((!Regex.Match(zipCode, _usZipRegEx).Success) && (!Regex.Match(zipCode, _caZipRegEx).Success))
        {
            validZipCode = false;
        }
        return validZipCode;
    }
}
[RegularExpression(@"(^\d{5}(-\d{4})?$)|(^[ABCEGHJKLMNPRSTVXYabceghjklmnprstvxy]{1}\d{1}[ABCEGHJKLMNPRSTVWXYZabceghjklmnprstv‌​xy]{1} *\d{1}[ABCEGHJKLMNPRSTVWXYZabceghjklmnprstvxy]{1}\d{1}$)", ErrorMessage = "That postal code is not a valid US or Canadian postal code.")]

(regex来自上面发布的链接@huMptyduMpty,但我的regex允许大写和小写字母)

在“我的机器”上工作的美国zipcode验证是


是否存在此方法失败的特定测试用例?顺便说一下,您可以将
Regex
声明为成员变量,这样您就不会在每次方法调用中构造它。我会在您正在或正在合并的模式周围添加一些括号。所谓“有效”是指“格式正确”吗?有很多5位数字,甚至更多的5+4,实际上没有用作邮政编码。数据注释为+1,但-1,因为它不是100%有效。根据维基百科,“邮政编码不包括字母D、F、I、O、Q或U”,但我可以输入其中任何一个(尽管不是作为第一个字符)。也就是说,我能够输入G1Q 3i7,但它没有显示验证错误。如果你要使用“-1”来表示不是100%有效,那么你还应该包括一个修复解决方案的建议,因为你似乎发现了该博客作者没有意识到的正则表达式中的一个弱点。这一点很好。我想如果你使用d moncada的加拿大正则表达式,但添加小写字母,那将是一个很好的解决方案。。类似于
^([ABCEGHJKLMNPRSTVXYabceghjklmnprstvxy]\d[abceghjklmnprstvxy])\{0,1}(\d[abceghjklmnprstvxy]\d)$
会很好地工作(对于加拿大)。谢谢你,保罗。我已经用您的更改更新了我的答案。我个人对加拿大邮政编码不是很熟悉,所以我认为博客的作者是对的。看起来有人在评论中也指出了正则表达式的弱点,但我们现在在这个答案中找到了它。干杯正则表达式的后两个字母部分中的大小写字母字符不匹配。”W'和Z'可以接受,但W'和Z'不能接受。
[RegularExpression(@"\d{5}$", ErrorMessage = "Invalid Zip Code")]