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

时间:2014-05-26 10:31:54

标签: c# asp.net regex

我试图在验证中不允许使用星号字符。 我的正则表达式是

addressFormat="^[a-zA-Z0-9 \~\!\@\#\$\%\^\*\(\)_\'\-\+\=\{\}\[\]\|\:\;\,\.\?\/]{0,45}$"

根据链接指定Link我尝试添加[^\*],如下所示。

"^[a-zA-Z0-9 \~\!\@\#\$\%\^\*\(\)_\'\-\+\=\{\}\[\]\|\:\;\,\.\?\/][^\*]{0,45}$"

"^[^\*][a-zA-Z0-9 \~\!\@\#\$\%\^\*\(\)_\'\-\+\=\{\}\[\]\|\:\;\,\.\?\/]{0,45}$"

但它在我的文本框中允许使用星号*字符。我的代码中有什么错误。 ?任何建议..

3 个答案:

答案 0 :(得分:2)

您的正则表达式可以简化为:

"^[a-zA-Z0-9 ~!@#$%^*()_'+={}\[\]|:;,.?/-]{0,45}$"

,因为[a-zA-Z0-9_]\w相同:

"^[\w~!@#$%^*()'+={}\[\]|:;,.?/-]{0,45}$"

然后你可以删除*

"^[\w~!@#$%^()'+={}\[\]|:;,.?/-]{0,45}$"

答案 1 :(得分:2)

首先,为了您的信息,您可以将正则表达式简化为:

^(?i)[-a-z0-9 ~!@#$%^()_'+={}[\]|:;,.?/]{0,45}$

由于您使用的是C#,除非您使用ECMAScript选项,否则不要屈服于用[0-9a-z_]替换\w的诱惑,因为C#假定您的字符串默认为utf-8,并且{{ 1}}会非常愉快地匹配您可能不想要的阿拉伯数字,尼泊尔字符等等......除非这是可以的:

\w

(但那是60个字符,超过你的45个限制......哇。)

更有趣的是:

以前出了什么问题?

当您拥有abcdᚠᚱᚩᚠᚢᚱტყაოსdᚉᚔమరמטᓂᕆᔭᕌसられま래도654۳۲١८৮੪૯୫୬१७੩௮௫౫೮൬൪๘໒໕២៧៦᠖ 等正则表达式(简化您之前的表达式)时,[^*][a-z]只匹配一个字符,那么[^*]只匹配一个其他角色(下一个)。他们没有共同努力对下一个角色施加条件。它们中的每一个都是字符类,每个字符指定要匹配的下一个字符,受可选量词的限制(在您的情况下,[a-z]

这会有效吗?

从表面上看,这可能看起来像票,但我不推荐它:

{0,45}

为什么不呢?这匹配任何不是星号的字符,零到45次。这听起来不错,但符合条件的角色会包含标签,新行和任何语言的任何字形...可能不是你想要的。

答案 2 :(得分:1)

从表达式中删除\*
另请查看 link - 在编写正则表达式时,这非常有用。

jsFiddle example

<强> HTML

<form>
<input type="text" required pattern="^[a-zA-Z0-9 \~\!\@\#\$\%\^\(\)_\'\-\+\=\{\}\[\]\|\:\;\,\.\?\/]{0,45}$" title="incorrect format"/>
    <input type="submit"/>
</form>