我正在尝试通过一个xml验证xsd。其中一个字段是可选字段,它可以包含值或不包含值。在我的例子中,电脑的IP。我正在检查正则表达式xsd,以检查它是否具有IP格式,但当它为空时不能进行验证。
这是示例
为了验证IP,我使用了以下regex:
((([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))|($)正如您所看到的,我尝试使用( IP表达式的正则表达式)\ ($),但它不适用于空字符串。
我做错了什么?我怎么才能修好它?谢谢大家
发布于 2016-04-22 14:40:42
正则表达式中有一个bug --未转义的.匹配任何字符。您可以转义它,也可以将其放入字符类中,例如[.],这样它只能匹配一个文字句点(点)。要匹配空字符串,只需在末尾添加?量词:
((([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))?
^^^ (dot inside a char class) ^ - The whole pattern can match 1 or 0 times也要匹配空行,您需要添加另一个选项:
(\s*|((([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])))
^^^^请参阅另一个regex演示
https://stackoverflow.com/questions/36796714
复制相似问题