【问题标题】:Password validation REGEX to disallow whitespaces密码验证正则表达式禁止空格
【发布时间】:2014-01-28 19:58:44
【问题描述】:
  • 密码不能包含空格
  • 必须至少包含一个数字字符
  • 必须包含 1 个大写字母
  • 并且长度至少为 8 个字符,最多 15 个

这就是我所拥有的,除了空白规则之外,它什么都做。

((?=.*\d)(?=.*[A-Z]).{8,15})

为此添加什么?

非常感谢! 语言:c#, asp:RegularExpressionValidator

【问题讨论】:

  • 出于好奇,您为什么不允许使用空格?
  • 另外,为什么要限制为 15 个字符?如果必须设置上限,请至少设置 40 个字符。

标签: c# regex validation


【解决方案1】:

只要匹配:

^(?!.* )(?=.*\d)(?=.*[A-Z]).{8,15}$

它是如何工作的:

.{8,15} 表示:8 到 15 个字符

(?!.* ) 表示:不包含“”
(?=.*\d) 表示:至少包含一位数字。
(?=.*[A-Z]) 表示:至少包含一个大写字母

【讨论】:

  • 您能否将您的正则表达式分解为多行注释并在每个部分的作用上添加 cmets?
  • 这确实适用于 2 个空格,但出于某种原因确实允许使用此字符串:as2dadasd asddD
  • 在那里试试:regexr.com?37uld,它似乎对我有用!实际上,考虑到@F.J 的评论,也许您只是在我更新它之前尝试过 :)
【解决方案2】:

^((?!.*[\s])(?=.*[A-Z])(?=.*\d).{8,15})

【讨论】:

  • 这几乎是我写的,除了这是在 12 分钟后发布的并且不包括解释、测试链接,最重要的是,15 个字符的限制没有实现。不过,如果它看起来很完美,我希望这就足够了:)
  • @ccjmne 是绝对写入,它不检查 15 个字符的限制。
  • @ccjmne 是绝对正确的,它不检查 15 个字符的限制。试试: ^(?!.*[\s])(?=.*[AZ])(?=.*\d).{8,15}$ 好的做法是只使用需要,不要用错误消息打扰用户。此类限制使得无法使用自动实用程序生成和存储密码(例如“1Password”)。
【解决方案3】:

作为 RegEx 的替代方案,您是否只考虑过基本的字符串解析?换句话说,如果您在编写 RegEx 时需要帮助,随着时间的推移,可维护性会发生什么变化?

对于我们大多数人来说,简单的字符串解析更容易理解。那些跟随我们脚步的人将更容易理解代码并添加其他要求。

这是一个使用自记录的字符串解析的示例,即使没有错误消息。

/// <summary>
/// Determines whether a password is valid.
/// </summary>
/// <param name="password">The password.</param>
/// <returns>A Tuple where Item1 is a boolean (true == valid password; false otherwise).
/// And Item2 is the message validating the password.</returns>
public Tuple<bool, string> IsValidPassword( string password )
{
    if( password.Contains( " " ) )
    {
        return new Tuple<bool, string>( false, "Password cannot contain white spaces." );
    }

    if( !password.Any( char.IsNumber ) )
    {
        return new Tuple<bool, string>( false, "Password must contain at least one numeric char." );
    }

    // perhaps the requirements meant to be 1 or more capital letters?
    // if( !password.Any( char.IsUpper ) )
    if( password.Count( char.IsUpper ) != 1 )
    {
        return new Tuple<bool, string>( false, "Password must contain only 1 capital letter." );
    }

    if( password.Length < 8 )
    {
        return new Tuple<bool, string>( false, "Password is too short; must be at least 8 characters (15 max)." );
    }

    if( password.Length > 15 )
    {
        return new Tuple<bool, string>( false, "Password is too long; must be no more than 15 characters (8 min)." );
    }

    return new Tuple<bool, string>( true, "Password is valid." );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2016-10-19
    • 2011-03-24
    • 1970-01-01
    相关资源
    最近更新 更多