Javascript英国邮政编码验证

dai*_*hop 5 javascript regex validation postal-code

可能重复:
英国邮政编码正则表达式(综合)

我有以下代码用于验证javascript中的邮政编码:

function valid_postcode(postcode) {
    postcode = postcode.replace(/\s/g, "");
    var regex = /[A-Z]{1,2}[0-9]{1,2} ?[0-9][A-Z]{2}/i;
    return regex.test(postcode);
}
Run Code Online (Sandbox Code Playgroud)

测试:

CF47 0HW - Passes - Correct
CF47 OHW - Passes - Incorrect
Run Code Online (Sandbox Code Playgroud)

我做了大量的研究,但似乎无法找到这个常见验证要求的权威正则表达式.有人能指出我正确的方向吗?

小智 7

通过添加^和$使你的正则表达式更严格.这应该工作:

function valid_postcode(postcode) {
    postcode = postcode.replace(/\s/g, "");
    var regex = /^[A-Z]{1,2}[0-9]{1,2} ?[0-9][A-Z]{2}$/i;
    return regex.test(postcode);
}
Run Code Online (Sandbox Code Playgroud)

  • 这不允许许多伦敦邮政编码,例如唐宁街是SW1A 2AA,白金汉宫是SW1A 1AA.尝试:`const regex =/^ [AZ] {1,2} [0-9] {1,2} [AZ] {0,1}?[0-9] [AZ] {2} $/i; `而不是. (3认同)

dun*_*can 7

你需要一个"权威的正则表达式" - 考虑到英国邮政编码的所有排列,它需要因此"不必要地大".这是我过去使用的一个

"(GIR 0AA)|((([ABCDEFGHIJKLMNOPRSTUWYZ][0-9][0-9]?)|(([ABCDEFGHIJKLMNOPRSTUWYZ][ABCDEFGHKLMNOPQRSTUVWXY][0-9][0-9]?)|(([ABCDEFGHIJKLMNOPRSTUWYZ][0-9][ABCDEFGHJKSTUW])|([ABCDEFGHIJKLMNOPRSTUWYZ][ABCDEFGHKLMNOPQRSTUVWXY][0-9][ABEHMNPRVWXY])))) [0-9][ABDEFGHJLNPQRSTUWXYZ]{2})"
Run Code Online (Sandbox Code Playgroud)

请注意,例如,我从不使用AZ,因为在每个部分中始终排除某些字母.