为Angular5应用程序使用JavaScript Reg验证UK PostCode

时间:2018-05-21 09:10:00

标签: javascript angular angular-validation

我正在研究Angular 5 Reactive Form验证并尝试使用自定义验证函数验证UK PostCode,该函数正在工作和测试,以便在邮政编码第二部分结束时提供额外的字母或数值,例如,它验证为true,例如NW10 5NW是正确的,但如果我输入类似NW10的东西,5NWRRRRRRRRRRRRRRRR也会返回true,这是不正确的。

我已尝试在https://regexr.com/上执行常规操作并返回正确的响应,不确定为什么javaScript中的行为方式不一样???

function postCodeValidator(control: FormControl)
 {
   let givenPostCode = control.value;

   let UKPostCodePattern = /^([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]))))\s?[0-9][A-Za-z]{2})/;

   var isUKPostCodeValid = UKPostCodePattern.test(givenPostCode); 

   console.log("postcode validity ",isUKPostCodeValid,  " for ", givenPostCode);

  if(!isUKPostCodeValid)
  {
    return {
        postCode:{
          required:"UK Valid PostCode",
          provided: givenPostCode
        }
    }
  }
  return null;
}

1 个答案:

答案 0 :(得分:2)

尝试使用以下正则表达式

^(([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]))))\s?[0-9][A-Za-z]{2}))$

https://regexr.com/3pp3r