首页 > 解决方案 > cvc-pattern-valid:相对于模式,值不是 facet-valid

问题描述

这是整个错误:

cvc-pattern-valid: Value '03151364512' is not facet-valid with respect to pattern '((((\+011)|(011))[-]?)?(599)((416)|(717)|(318))[0-9]{4})|(((085)|(088))[-]?[0-9]{7})([,][1-9][0-9]{1,8})?|((((\+31)|(0)|(0031))[1-9][0-9]{2})[-]?([1-9][0-9]{5}))([,][1-9][0-9]{1,8})?|((((\+31)|(0)|(0031))[1-9][0-9])[-]?([1-9][0-9]{6}))([,][1-9][0-9]{1,8})?|(((14)[-]?)(0)([1-9][0-9]{1,2}))|((((\+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-9]\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})'

我用过的每个在线检查器都说这个值应该是有效的。有任何想法吗?

标签: regexxmlxsd

解决方案


XSD 模式应该匹配整个字符串。

因此,模式与预期的不匹配03151364512,因为最后一个2 不匹配

您应该修复 Angular 验证以禁止使用部分字符串匹配

/^(?:(?:\+?011-?)?599(?:416|717|318)[0-9]{4}|08[58]-?[0-9]{7}(?:,[1-9][0-9]{1,8})?|(?:\+31|0|0031)[1-9][0-9]{2}-?[1-9][0-9]{5}(?:,[1-9][0-9]{1,8})?|(?:\+31|0|0031)[1-9][0-9]-?[1-9][0-9]{6}(?:,[1-9][0-9]{1,8})?|14-?0[1-9][0-9]{1,2}|(?:\+31|0|0031)6-?[1-9][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-9]\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}))$/

请注意正则表达式文字符号,不应使用任何引号括起来。

实际上,在 JavaScript 中,您可以使用非捕获组 ( (?:...)) 而不是捕获组 ( (...)),以节省一些计算资源。


推荐阅读