【发布时间】:2019-07-09 09:06:57
【问题描述】:
我们有一个使用 XSD 验证传入消息的 Java API。为了验证电话号码,它使用以下模式:
((085)[-]?[0-9]{7})|((088)[-]?[0-9]{7})|(((0)[1-9]{2}[0-9][-]?[1-9][0-9]{5})|((\\+31|0|0031)[1-9][0-9][-]?[1-9][0-9]{6}))|((06)[-]?[1-9]{1}[0-9]{7})|(((\\+31|0|0031)6){1}[-]?[1-9]{1}[0-9]{7})|\\+(1\d{4,14}|2[078]\\d{3,13}|3[0-469]\\d{3,13}|4[013-9]\\d{3,13}|5[1-8]\\d{3,13}|6[0-6]\\d{3,13}|7\\d{4,14}|8[1-469]\\d{3,13}|9[0-58]\\d{3,13}|[2-9]\\d{4,14})
我使用这种精确模式创建了一个表单,注意使用双反斜杠:
this.inputForm = this.formBuilder.group({
phonenumber: ['', Validators.pattern('((085)[-]?[0-9]{7})|((088)[-]?[0-9]{7})|(((0)[1-9]{2}[0-9][-]?[1-9][0-9]{5})|((\\+31|0|0031)[1-9][0-9][-]?[1-9][0-9]{6}))|((06)[-]?[1-9]{1}[0-9]{7})|(((\\+31|0|0031)6){1}[-]?[1-9]{1}[0-9]{7})|\\+(1\\d{4,14}|2[078]\\d{3,13}|3[0-469]\\d{3,13}|4[013-9]\\d{3,13}|5[1-8]\\d{3,13}|6[0-6]\\d{3,13}|7\\d{4,14}|8[1-469]\\d{3,13}|9[0-58]\\d{3,13}|[2-9]\\d{4,14})')],
});
这在大多数情况下都有效,但它仍然允许 XSD 拒绝的某些数字。例如,我可以输入 061234567912345678 并且验证器会允许它,但 XSD 不会。有谁知道是什么原因造成的?
【问题讨论】:
-
可能是错字:
1\d{4,14}而不是1\\d{4,14}
标签: regex angular validation angular-reactive-forms