我尝试用regex实现这个规则:“用户输入的asp:textbox中的名称不能包含任何空格以及以下任何字符:“
`~!@#$%^&*()=+[]{}\|;:'",<>/?_ .
而且长度不能大于15。
我正在使用这样的东西:
<asp:RegularExpressionValidator ID="validateName" runat="server" Text="*" ValidationExpression="(?=^.{1,15}$)(^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$)" ControlToValidate="txtName" Display="Dynamic" SetFocusOnError="true" ValidationGroup="Wizard"> </asp:RegularExpressionValidator>
但是问题是**test12.**是无效的(正确的),test12.test.something正在通过,这对我的问题来说是不正确的。我也尝试了这个正则表达式,但没有结果,因为asdasdads.gr通过了(不正确):
(?=^[A-Za-z0-9\-]{1,15}$)
也许我把它弄得太复杂了,现在我被卡住了。
3条答案
按热度按时间hof1towb1#
由于您的要求是:
你可以使用一个带
{1,15}
限定量词的否定字符类:参见regex demo。我们必须转义
\
符号,我们需要转义]
符号(因为它可以被JS引擎使用)。由于\
用于指定转义序列,因此也要转义它(使用双斜杠表示一个文字\
)。注意,如果在某些HTML属性中使用双引号,则需要将其序列化为"
(或使用十六进制表示正则表达式-\x22
)。详细说明:
^
-字符串的开头[^\][^
~!@#$%^&*()=+{}\|;:'",<>/?_\s.]{1,15}- 1到15个字符(由于限定量词
{1,15}),这些字符不在定义的集合中(
[^...]是 * 取反字符类 *)。如果您计划允许空字符串,请使用
{0,15}`量词。$
-字符串结束zu0ti5jz2#
在注解中,我们讨论了尝试只搜索有效字符。
[A-Za-z0-9\-]{1,15}
如果你需要“test12”,这应该对“test12”起作用。此外,\d用于数字,而不是使用0-9
[A-Za-z\d\-\.]{1,15}
如果你想让它在末尾有一个可选的全顶部,使用下面的正则表达式。?表示0或1。
[A-Za-z\d\-]{1,15}\.?
wsewodh23#
最后,这对我来说很有用:
完整代码: