在asp.net应用程序中,我需要根据可配置的正则表达式验证用户输入。我在db中有一个这样的正则表达式列表,它是用户可配置的,而不是固定的。 我的问题是,在这些正则表达式中,点的意图不是匹配任何字符,而是任何“合理的”字符(在该上下文中是合理的:字母,数字和其他一些ascii字符)。因此,验证过程分两步进行
^[\w.+/-]*$
我想使用单个正则表达式,以便我可以将它放在页面上的单个regexp验证器中 - 这样可以提供更好的用户体验。我可以在正则表达式中搜索点并用我更严格的字符类[\w.+/-]
替换。
但并非所有的点在正则表达式中具有相同的含义。
所以我的问题是:在regexp中有一种经过验证的方法可以找到点,但只有在用作角色类时?可能是正则表达式?
答案 0 :(得分:2)
只是为了进入同一页面,在a.b[.]\.\[.\[\]
中,应找到两个点:a
和b
之间,以及转义大括号之间的最后一个点。其他是字面时期。
幸运的是,ASP.NET不知道\Q
和\E
来逃避模式片段。
您可以使用此正则表达式:
(?<!\\)\.(?!(?:\\\[\]\[]|[^][])*(?<!\\)\])
在the demo上,观察只有正确的点匹配。
解释
(?<!\\)
确保我们前面没有转义反斜杠\.
与我们想要的点匹配(?!(?:\\\[\]\[]|[^][])*(?<!\\)\])
确保我们不会被... (?:\\\[\]\[]|[^][])*
任意数量的\[
,\], or non
[]`字符,然后(?<!\\)\]
<强>参考强>