我正在尝试使用正则表达式实现此规则:“用户输入的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}$)
也许我太复杂了,现在我卡住了。
答案 0 :(得分:1)
由于您的要求是:
- 此套装中没有字符:
`~!@#$%^&*()=+[]{}\|;:'",<>/?_ .
- 长度不得超过15。
您可以使用带有{1,15}
限制量词的否定字符类:
ValidationExpression="^[^\][^`~!@#$%^&*()=+{}\\|;:'",<>/?_\s.]{1,15}$"
见regex demo。我们必须转义\
符号,我们需要转义]
符号(因为它可以被JS引擎使用)。由于\
用于指定转义序列,因此也将其转义(使用双斜杠表示一个文字\
)。 请注意,如果您在某个HTML属性中使用它,则需要将双引号序列化为"
(或使用正则表达式的十六进制表示 - \x22
)。
详细解释:
^
- 字符串开头[^\][^`~!@#$%^&*()=+{}\\|;:'",<>/?_\s.]{1,15}
- 1到15个字符(由于限制量词{1,15}
)不在定义的集合中([^...]
是否定字符类)。如果您打算允许空字符串,请使用{0,15}
量词。 $
- 字符串结尾答案 1 :(得分:0)
在评论中我们讨论过只尝试搜索有效字符。
[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}\.?
答案 2 :(得分:-1)
最终这对我有用:
ValidationExpression="^[^\][^`~!@#$%^&*()=+{}\\|;:'\x22,<>/?_\s.]{1,15}$"
完整代码:
<asp:TextBox ID="txtHostname" runat="server" CssClass="NormalTextBox" Text=""></asp:TextBox>
<asp:RequiredFieldValidator ID="HostnameValidator" runat="server" Text="*" Display="Dynamic"
ControlToValidate="txtHostname" meta:resourcekey="HostnameValidator" SetFocusOnError="true"
ValidationGroup="VpsWizard">
*
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="valCorrectHostname" runat="server" Text="*" meta:resourcekey="valCorrectHostname"
ValidationExpression="^[^\][^`~!@#$%^&*()=+{}\\|;:'\x22,<>/?_\s.]{1,15}$"
ControlToValidate="txtHostname" Display="Dynamic" SetFocusOnError="true" ValidationGroup="VpsWizard">
</asp:RegularExpressionValidator>