在asp.net应用程序中,我需要根据可配置的正则表达式验证用户输入。我在数据库中有此类正则表达式的列表,并且它是用户可配置的,而不是固定的。我的问题是,在这些正则表达式中,点不匹配任何字符,而是匹配任何“合理的”字符(在这种情况下是合理的:字母,数字和其他一些ascii字符)。因此,验证过程分两步进行
^[\w.+/-]*$
我想使用一个正则表达式,以便可以将其放在页面上的单个正则表达式验证器中-这样可以提供更好的用户体验。我可以搜索正则表达式中的点,并用更严格的字符类替换[\w.+/-]
。但是,并非所有的点在正则表达式中都具有相同的含义。
所以我的问题是:在正则表达式中有一种尝试并找到真实点的方法,但是仅当用作字符类时才可以?一个正则表达式也许?
只是为了进入同一页面,在中a.b[.]\.\[.\[\]
应该找到两个点:a
和之间b
,以及最后一个点,位于转义括号之间。其他的则是文字时期。
对我们来说幸运的是,ASP.NET不了解\Q
并\E
逃脱模式片段。
您可以使用此正则表达式:
(?<!\\)\.(?!(?:\\\[\]\[]|[^][])*(?<!\\)\])
在演示中,观察到只有正确的点才被匹配。
解释
(?<!\\)
可确保我们前面没有转义的反斜杠\.
我们想要的点相匹配(?!(?:\\\[\]\[]|[^][])*(?<!\\)\])
确保我们不会被...(?:\\\[\]\[]|[^][])*
任何数量的\[
,\], or non
[]`字符,然后(?<!\\)\]
参考
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句