正则表达式验证不允许星号

本文关键字:不允许 验证 正则表达式 | 更新日期: 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次。这听起来不错,但符合条件的字符包括制表符、新行和任何语言的任何字形……

从表达式中删除'*
还可以看看这个链接 -它在您编写正则表达式时非常有用。

<<p> jsFiddle例子/strong>