Angular 7模式验证允许输入不应被允许

时间:2019-07-09 09:06:57

标签: regex angular validation angular-reactive-forms

我们有一个Java API,可以使用XSD验证传入的消息。为了验证电话号码,它使用以下模式:

((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 个答案:

答案 0 :(得分:0)

onChange匹配061234567912345678,我认为您应该使用(06)[-]?[1-9]{1}[0-9]{7}作为正则表达式(开头是^(((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}))$,结尾是^()字符串的开头和结尾(之间是您可能使用的不同正则表达式)