如何根据用户输入在Regex上执行if-else?

时间:2016-10-04 02:31:29

标签: c# asp.net regex

我需要一个正则表达式。我基本上要做的是验证密码字段。

条件: 1.最小值为6个字符。

  1. 如果值为6个字符但不超过9个字符,则应包含至少1个数字和1个字母(允许使用字母数字和空格)。

  2. 如果值超过10个字符,则只能是字母。不需要像条件#2那样的数字。 (允许使用字母数字和空格)

  3. 我在RegularExpressionValidator ASP.NET控件中执行此操作。

    谢谢!

2 个答案:

答案 0 :(得分:0)

另一种方法是使用asp RegularExpressionValidator和CustomValidator的组合。您的正则表达式验证器可以使用以下内容检查最小长度:

<asp:RegularExpressionValidator id="regexPassword" runat="server" 
Enabled="true" ControlToValidate="passwordTexbox" 
ValidationExpression"^([a-zA-Z0-9_-]){6,}$"
</asp:RegularExpressionValidator>

<asp:CustomValidator id="customValidatorPassword" runat="server" 
OnServerValidate="PasswordValid" 
ControlToValidate="passwordTexbox">
</asp:CustomValidator>

然后您的服务器验证可能是这样的:

PasswordValid(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
{
    //Check if an integer was entered if the length is <= 9
    int integer;
    if(passwordTextbox.Text.Length <= 9 && Int32.TryParse(passwordTextbox.Text, out integer))
    {
         args.IsValid = true;
    }
    else if (passwordTextbox.Text.Length > 9)
    {
        args.IsValid = true;
    }
    else 
    {
         args.IsValid = false;
    }

}

您可以在服务器代码或asp控件中设置错误消息。

答案 1 :(得分:0)

我不知道您使用的控件的可能性,因为我不是ASP.NET开发人员。

这是应该有效的正则表达式,但我认为你应该通过检查代码中的值来使用另一个选项。这个正则表达式难以理解且难以维护:

(?=(?:^.{10,}$|(?<issmall>^.{6,9}$)))(?(issmall)(?=^.*\d)(?=^.*[a-zA-Z]).*|.*)

DEMO

输出:

0123456789: True
Hello1: True
Helloa: False
123456: False
Thats a very long text that should be accepted.: True