【问题标题】:regex for alphanumeric only is not working仅用于字母数字的正则表达式不起作用
【发布时间】:2016-05-24 15:34:10
【问题描述】:

这是我正在尝试的代码:

string MatchNumberPattern = "^[a-zA-Z0-9]*$";

if (!Regex.IsMatch(cueTextBox9.Text, MatchNumberPattern))
{
    MessageBox.Show("Enter 8 Space Alphanumeric BT ID only");
    cueTextBox9.Text = String.Empty;
}
else
{
    do something();
}

它接受aaaaaaaa,但我想要字母和数字的组合,例如aaaa1234

【问题讨论】:

  • 当然,它采用aaaaaaaa,您指定它采用任意次数的 a-z 或 A-Z 或 0-9 的任何内容。所以它也需要aaabbbjfgkgAJFFJL0142342。你想干什么?如果您只想匹配数字:^[0-9]*$^[0-9]+$ 如果空字符串不行。您可以使用\d 代替[0-9] 作为简写,但首先请说明您想要什么:)
  • 我只想接受字母数字,而不是仅接受字母或仅接受数字..
  • 字母数字的意思是“字母数字是字母和数字字符的组合......”(引用自维基),所以它表示字母和数字。这就是你已经在这里做的事情了。
  • 老兄,我是说我想要字母和数字都在其中...都在一个字符串中,那么它将是可以接受的。否则不是
  • 供将来参考:“我希望我的正则表达式只匹配同时包含字母和数字的输入”。并且不要“花花公子”我。

标签: c# regex winforms validation


【解决方案1】:

要在输入中同时出现字母和数字,您需要正向前瞻

@"^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]*$"
    ^^^^^^^^^^^^^^^^^^^^^^^^

regex demo

(?=.*[a-zA-Z]) 确保输入字符串中有一个字母,(?=.*[0-9]) 确保输入字符串中有一个数字。

由于您从单行文本框中获取输入,因此在前瞻中使用. 是安全的。作为替代方案,您可以使用@"^(?=[^a-zA-Z]*[a-zA-Z])(?=[^0-9]*[0-9])[a-zA-Z0-9]*$"(基于对比原理)。

【讨论】:

    【解决方案2】:

    您可以使用lookahead 来检查一个数字并在其余部分之前匹配一个字母。

    ^(?i)(?=\D*\d)\d*[A-Z][A-Z\d]*$
    
    • ^ 字符串开头
    • (?i) flag 用于无大小写匹配
    • (?=\D*\d) 提前查看\D* 任意数量的非数字,后跟\d 数字
    • 如果成功匹配 \d*[A-Z] 任意数量的数字后跟 alpha
    • [A-Z\d]* 匹配任意数量的字母数字字符,直到
    • $ 字符串结束

    See demo at regex101

    【讨论】:

      【解决方案3】:
        async Task<string> CheckPasswordAgainstPasswordSettings(string password)
              {
                  Regex rxUpper= new Regex(@"[A-Z]");
                  Regex rxLower = new Regex(@"[a-z]");
      
      
      
                  var passwordcomplexityrulesetttings=  (await _PasswordComplexityRuleService.All()).First();
                if(passwordcomplexityrulesetttings==null)
                  {
                      return "password valid";
                  }
                if(passwordcomplexityrulesetttings.MinLength> password.Length)
                  {
                      return "password is not of minimum length";
      
                  }
                  if (passwordcomplexityrulesetttings.MustContainLettersNumbers)
                  {
                      if(password.Any(a=>!char.IsDigit(a)&&!char.IsLetter(a)) && !passwordcomplexityrulesetttings.MustContainSpecialCharacters)
                      
                      {
                          return "password must contain letters and numbers";
                      }
      
      
                  }
      
                  if (passwordcomplexityrulesetttings.MustContainSpecialCharacters)
                  {
      
                      if (!password.Any(a => !char.IsDigit(a) && !char.IsLetter(a)))
      
                      {
                          return "password must contain special characters";
                      }
      
      
                  }
                  if (passwordcomplexityrulesetttings.MustContainUpperLower)
                  {
      
                      if (!rxLower.Match(password).Success||!rxUpper.Match(password).Success)
      
                      {
                          return "password must contain upper and lower case";
                      }
      
      
                  }
                  
                  return "password valid";
      
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-30
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 2020-11-19
        • 1970-01-01
        • 2011-12-26
        相关资源
        最近更新 更多