我在使用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个数字块的地址。
正则表达不是吗?谢谢,