为什么正则表达式验证器被忽略?

时间:2018-10-24 10:19:37

标签: c# asp.net regex webforms

我已经使用regularexpressionvalidator实现了正则表达式,但是它不起作用。

就好像它忽略了验证器。为什么呢

  <div class="form-group">
                            <label class="control-label">
                                New Password
                                 <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtnewPassword"
                                     ErrorMessage="*" Display="Dynamic" ForeColor="red" ValidationGroup="acc"></asp:RequiredFieldValidator>
                                <asp:RegularExpressionValidator ID="regexValNewPassword" runat="server" Display="Dynamic" ForeColor="red" ValidationGroup="acc"
                                    ControlToValidate="txtnewPassword"
                                    EnableClientScript="False"
                                    ErrorMessage="***"
                                    ValidationExpression="^[1-9]+[0-9]*$" Visible="True">
                                    *
                                </asp:RegularExpressionValidator>

                            </label>
                            <asp:TextBox runat="server" ID="txtnewPassword" TextMode="Password" CssClass="form-control passwords"></asp:TextBox>

                        </div>

更新:

请参阅。我只在输入数字字符串时希望我的正则表达式抛出错误。 123455。它只能接受混合字符字符串,例如12ac3b12或aac2211 @ 11

2 个答案:

答案 0 :(得分:0)

如果输入的只是数字,则可以使用不匹配的正则表达式。根据您的当前要求,只有输入至少包含一位数字和一个字母时,它才会匹配。这里的最小密码长度是2,您可以在此处指定数字{N,}来设置任何长度。如果您对字符集有其他类似要求,可以进一步调整正则表达式,或者让我知道,我可以进一步更新正则表达式。 / p>

^(?=.*[A-Za-z])(?=.*\d).{2,}$

演示

https://regex101.com/r/Fv7cw7/1

答案 1 :(得分:0)

您的正则表达式^[1-9]+[0-9]*$仅匹配数字,并且应以1-9开头。

要检查是否至少包含一个字符和一个数字,可以使用正向前瞻。

^(?=.*[A-Za-z@])(?=.*\d)[@a-zA-Z\d]+$

Regex demo

说明

  • ^字符串的开头
  • (?=.*[A-Za-z@])正向前进,以断言character class中的1个字符
  • (?=.*\d)正向肯定表示1位数字
  • [@a-zA-Z\d]+匹配字符类中所允许内容的1倍以上。您可以将要匹配的内容添加到角色类中。
  • $字符串的结尾

由于2个正向先行,最小长度为2个字符。如果要匹配最小长度(例如8),可以将{8}之类的quantifier(而不是+)添加到字符类中。