【问题标题】:Regex to include all special characters正则表达式包含所有特殊字符
【发布时间】:2023-03-16 09:43:01
【问题描述】:

我似乎找不到任何合适的答案。

我需要一个正则表达式来确保至少有 one special characterone numberone upperone lower 并且至少有 8 个长度。

我这里有一些,但由于某种原因,当我添加更多字符时,它无法识别它们。

ValidationExpression="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%.*?&]{8,}" 

我想添加每个特殊字符。

【问题讨论】:

  • 我不知道我是否会把它变成一个正则表达式,因为这些字符中的任何一个都可以出现在你的字符串中的任何地方,所以它不是一个真正的模式。我可能只会对要验证的字符串的每个要求发出单独的检查。我知道这不是一个整洁的小单行字,但至少它是可读的。
  • 您的意思是要匹配除空格以外的任何字符?将[A-Za-z\d$@$!%.*?&] 替换为\S
  • 我有两个输入字符串,它们正在检查输入字符串中是否存在至少一个上述字符。但我想添加所有可用的特殊字符,以检查至少用户是否至少使用了其中一个。
  • 所以本质上,我想添加 !"£$%^&*()_+{}:@~?|-=[];'#,./\ 也

标签: c# asp.net regex


【解决方案1】:

请尽量避免使用冗长而复杂的正则表达式,因为将来很难理解和修改它们。而是定义几个简单直接的Regex,然后结合c#代码

var hasLowercaseChar = new Regex("[a-z]");
var hasUppercaseChar = new Regex("[A-Z]");
var hasDigitChar = new Regex("[0-9]");
var hasSpecialChar = new Regex("\\$!\\^-@%&\\.\\*");

var input = "" // your input string here
var passwordIsValid = hasLowercaseChar.IsMatch(input)
    && hasUppercaseChar.IsMatch(input)
    && hasDigitChar.IsMatch(input)
    && hasSpecialChar.IsMatch(input)
    && input.Length >= 8;

在上面的例子中,每个正则表达式都很简单,即使你不确定它应该匹配什么,你也可以从变量名中推断出来

【讨论】:

    【解决方案2】:

    以下正则表达式应该可以解决问题: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W)[\S]{8,}$

    【讨论】:

      【解决方案3】:

      尝试正则表达式:(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@!%*?&!"£$%^&*()_+{}:@~<>?|=[\];'#,.\/\\-])[A-Za-z\d$@!%*?&!"£$%^&*()_+{}:@~<>?|=[\];'#,.\/\\-]{8,}

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        • 2017-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多