C# - 英国邮政编码正则表达式表达无法正常工作?

时间:2018-02-10 00:15:47

标签: c# regex postal-code

我查看了本网站上的许多问题,例如this one用于Regex Expression以验证英国邮政编码:

我有以下例子:

  • FA4 5SC [有效]

  • FA45SC [有效]

  • 1FA4 5SC [无效]

我有以下代码:

static void Main(string[] args)
{
    string[] postcodes = { "FA4 5SC", "FA45SC",
                      "1FA4 5SC"};    
    Regex rgx = new Regex("^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$");

    foreach (string postcode in postcodes)
        Console.WriteLine("{0} {1} a valid postcode number.",
                          postcode,
                          rgx.IsMatch(postcode) ? "is" : "is not");     
    Console.ReadKey();
}

我得到以下输出:

FA4 5SC is a valid postcode number.
FA45SC is not a valid postcode number.
1FA4 5SC is a valid postcode number.

我需要在我的正则表达式中修改什么才能使最后两个邮政编码无效。这意味着如果邮政编码以数字开头,它应该是无效的。

2 个答案:

答案 0 :(得分:2)

如果您还希望此FA45SC有效,请尝试此操作:

Regex rgx = new Regex("^([Gg][Ii][Rr] 0[Aa]{2}|([A-Za-z][0-9]{1,2}|[A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2}|[A-Za-z][0-9][A-Za-z]|[A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]) {0,1}[0-9][A-Za-z]{2})$");

答案 1 :(得分:1)

我认为正则表达式有一个优先级错误 - 第一个括号组后的交替优先级低于插入符号,所以它只测试它是否在字符串的开头找到该组。此外,对于交替选项,它有很多不需要的括号,否则很难理解。

试试这个:

var pool: AWSCognitoIdentityUserPool?

override func viewDidLoad() {
    super.viewDidLoad()
    self.pool = AWSCognitoIdentityUserPool.init(forKey: 
    AWSCognitoUserPoolsSignInProviderKey)
}

...

AWSCognitoIdentityUser.getAttributeVerificationCode("email")  

// or

AWSCognitoIdentityUser.resendConfirmationCode()

要使空格可选,

Regex rgx = new Regex("^([Gg][Ii][Rr] 0[Aa]{2}|([A-Za-z][0-9]{1,2}|[A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2}|[A-Za-z][0-9][A-Za-z]|[A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]) [0-9][A-Za-z]{2})$");