【问题标题】:Angular 7 pattern validation allowing input that shouldn't be allowedAngular 7 模式验证允许不应允许的输入
【发布时间】: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


【解决方案1】:

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}))$作为正则表达式(在开头添加^(,在末尾添加)$)它匹配字符串的开头和结尾(介于两者之间是你不同的可能正则表达式)

【讨论】:

    猜你喜欢
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2020-02-25
    相关资源
    最近更新 更多