IPv4地址FormControl验证(Angular2)

时间:2017-09-28 10:55:22

标签: javascript regex angular angular-reactive-forms

我在使用Angular2反应形式验证IPv4表单字段时遇到问题。

我像这样定义表单字段:

this.formModel.addControl('address', new FormControl('', this.ipAddressValidator.bind(this)));

验证器功能是:

ipAddressValidator(control: FormControl): {[key: string]: any} {
  const value: string = control.value || '';
  let valid;
  let ipVersion : string;

  if(this.formModel.controls['ip_version']) 
    ipVersion = this.formModel.controls['ip_version'].value;

  if(ipVersion == 'IPv6')
    valid = value.match(this.ipV6Regexp);
  else
    valid = value.match(this.ipV4Regexp);   // By default, consider the address as IP V4

  return valid ? null : { ip: true };
}

基本上,它会检查HTML select标记的值(' ip_version')并将正则表达式设置为IPv4或IPv6。保存IPv4正则表达式的变量是' this.ipV4Regexp',其值为:

public ipV4Regexp : string = 
"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";

问题是表单接受值为' 192.168'或者' 192.168.10',当正则表达式明确指定只接受{3}个数字块,然后是最后一个。如果我去测试表达式https://regex101.com/,它可以正常工作,只接受4个数字块的地址。

正则表达不是吗?谢谢,

0 个答案:

没有答案