我试图在验证中不允许使用星号字符。 我的正则表达式是
addressFormat="^[a-zA-Z0-9 \~\!\@\#\$\%\^\*\(\)_\'\-\+\=\{\}\[\]\|\:\;\,\.\?\/]{0,45}$"
根据链接指定Link我尝试添加[^\*]
,如下所示。
"^[a-zA-Z0-9 \~\!\@\#\$\%\^\*\(\)_\'\-\+\=\{\}\[\]\|\:\;\,\.\?\/][^\*]{0,45}$"
"^[^\*][a-zA-Z0-9 \~\!\@\#\$\%\^\*\(\)_\'\-\+\=\{\}\[\]\|\:\;\,\.\?\/]{0,45}$"
但它在我的文本框中允许使用星号*字符。我的代码中有什么错误。 ?任何建议..
答案 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 - 在编写正则表达式时,这非常有用。
<强> HTML 强>
<form>
<input type="text" required pattern="^[a-zA-Z0-9 \~\!\@\#\$\%\^\(\)_\'\-\+\=\{\}\[\]\|\:\;\,\.\?\/]{0,45}$" title="incorrect format"/>
<input type="submit"/>
</form>