繁体   English   中英

没有特殊字符的正则表达式

[英]Regex without special characters

我正在使用正则表达式来验证密码

这是我的正则表达式配置

@"^(?!.*[\s])(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{6,32}$"

我的标准是

  • 密码必须至少包含一个大写字母、一个小写字母和一个数字;
  • 它不能有任何特殊字符、重音或空格;
  • 此外,密码长度可以为 6 到 32 个字符。

我正在等待的测试:

  • BIT123456 无效
  • 2021年有效
  • Fing!2020 Is Invalid ( but it returns valid )

我检查错误的代码:

using System;
using System.Text.RegularExpressions;

class Program
{

   static void Main(string[] args)
   {

      var totalTestCases = int.Parse(Console.ReadLine());

      string S = "";
      string pattern = @"^(?!.*[\s])(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{6,32}$";

      var n = 0;
      do
      {
         n++;
         S = Console.ReadLine();
         if (S != "")
         {
            // Console.WriteLine("{0}", Regex.IsMatch(S, pattern) ? "Senha valida." : "Senha invalida.");
            string test = Regex.IsMatch(S, pattern) ? "Password valid." : "Password invalid.";
            Console.WriteLine(test);
         }
      } while (n < totalTestCases);
   }
}

尝试将此 Regex 放入您的代码中,它将适用于您的条件。

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{6,32}$/

用下面的代码替换模式变量:)

string pattern = @"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{6,32}$";

@Arpit Patel 的回答非常好,但我会花一点时间来解释你的方法有什么问题。 让我们分解一下:

  • ^(?.:*[\s])。 负面展望表示“没有空格”。 没关系。
  • (?=.*[0-9]):正面展望说:“必须有一个数字”。 没关系。
  • (?=.*[az]):正向向前表示:“必须有一个小写字母”。 没关系。
  • (?=.*[AZ]): 正面展望表示:“必须有一个大写字母”。 没关系。
  • 。: 什么都行。 这显然是错误的。
  • {6,32}:长度要求。

所以 Arpit 的回答是:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{6,32}$

取消“任何事情”并插入合法字符。 因此,由于禁止使用空格,因此不再需要负面展望。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM