正则表达式验证不允许星号
本文关键字:不允许 验证 正则表达式 | 更新日期: 2023-09-27 18:05:23
我试图不允许星号字符在我的验证。我的正则表达式是
addressFormat="^[a-zA-Z0-9 '~'!'@'#'$'%'^'*'(')_'''-'+'='{'}'[']'|':';','.'?'/]{0,45}$"
根据链接的指定,link I尝试添加[^'*]
,如下所示。
"^[a-zA-Z0-9 '~'!'@'#'$'%'^'*'(')_'''-'+'='{'}'[']'|':';','.'?'/][^'*]{0,45}$"
"^[^'*][a-zA-Z0-9 '~'!'@'#'$'%'^'*'(')_'''-'+'='{'}'[']'|':';','.'?'/]{0,45}$"
但它是允许星号*字符在我的文本框。我代码中的错误是什么?? 有什么建议。
你的正则表达式可以简化为:
"^[a-zA-Z0-9 ~!@#$%^*()_'+={}'[']|:;,.?/-]{0,45}$"
和,因为[a-zA-Z0-9_]
和'w
相同:
"^['w~!@#$%^*()'+={}'[']|:;,.?/-]{0,45}$"
则可以移除*
:
"^['w~!@#$%^()'+={}'[']|:;,.?/-]{0,45}$"
首先,您可以将正则表达式简化为:
^(?i)[-a-z0-9 ~!@#$%^()_'+={}[']|:;,.?/]{0,45}$
既然你正在使用c#,不要屈服于用'w
替换[0-9a-z_]
的诱惑,除非你使用ECMAScript选项,因为c#假设你的字符串默认是utf-8,而'w
将非常高兴地匹配阿拉伯数字,尼泊尔字符等等,你可能不希望…除非这是可以的:
abcdᚠᚱᚩᚠᚢᚱტყაოსdᚉᚔమరמטᓂᕆᔭᕌसられま래도654۳۲١८৮੪૯୫୬१७੩௮௫౫೮൬൪๘໒໕២៧៦᠖
(但这是60个字符,超过了你的45个限制…唷。)
更有趣的是:
之前出了什么问题?
当您有一个像[^*][a-z]
这样的正则表达式(简化您之前的表达式)时,[^*]
只匹配一个字符,然后[a-z]
只匹配一个另一个字符(下一个)。它们不会一起对下一个角色施加条件。它们中的每一个都是字符类,并且每个字符指定下一个要匹配的字符,服从于一个可选的量词(在您的例子中是{0,45}
这行得通吗?
从表面上看,这可能看起来像票,但我不推荐这样做:
^[^*]{0,45}$
为什么不呢?匹配任何非星号的字符,0到45次。这听起来不错,但符合条件的字符包括制表符、新行和任何语言的任何字形……
从表达式中删除'*
。
还可以看看这个链接 -它在您编写正则表达式时非常有用。