【问题标题】:RegularExpression data annotation正则表达式数据标注
【发布时间】:2016-04-23 20:17:14
【问题描述】:

我正在尝试检查(在 ASP.net MVC 中)输入的密码是否包含“大写、小写和数字”。正则表达式没问题,但不起作用(请输入有效密码)。如果我输入一个简单的表达式 @"^d+$",如果它有效。有什么问题?谢谢!

private const string Pattern = @"^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])$";

[DataType(DataType.Password)]
[DisplayName("Password:")]
[Required(ErrorMessage = "Please enter your password.")]
[RegularExpression(Pattern, ErrorMessage = "Please enter a valid password")]
public string Password { get; set; }

【问题讨论】:

    标签: c# regex asp.net-mvc


    【解决方案1】:

    正则表达式模式不匹配任何字符串,因为它要求字符串包含大小写字母和数字,但没有消耗子模式。要匹配任意长度的字符串,请使用

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

    或者 - 只匹配一个非空字符串

    @"^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).+$"
                                        ^^
    

    .* 匹配除换行符之外的任何 0+ 个字符,.+ 匹配除换行符之外的 1+ 个字符。

    如果您希望字符串仅包含大小写字母或/和数字,请使用[a-zA-Z0-9] 字符类:

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

    根据需要调整量词。

    【讨论】:

    • @PoulBak:应该吗?简单 - @"^(?=.*\p{Lu})(?=.*\p{Ll})(?=.*\d).*$" 或者更好:@"\A(?=.*\p{Lu})(?=.*\p{Ll})(?=.*\d).*\z"
    • 我不知道,我只是尽可能喜欢unicode。
    • @PoulBak:除非在问题中说明,否则没有必要使答案复杂化。如果在服务器端和客户端都执行验证怎么办?然后,表达式应该与 ES5 正则表达式语法兼容。
    • @WiktorStribiżew 嗨!!!!,为什么这个表达式不起作用? ^(?=.*[az])(?=.*[$%&])[az][$%&]*$" 这很好用 ^(?=.*[az])(?=.* [AZ])[az][AZ]*$" 谢谢!
    • 我想你想要的只是将带有特殊字符的小写 ASCII 字母与第一个正则表达式匹配,并且它必须是 ^(?=.*[a-z])(?=.*[$%&])[a-z$%&]*$。第二个必须匹配只有 ASCII 字母的字符串,所以,使用^(?=.*[a-z])(?=.*[A-Z])[a-zA-Z]*$
    【解决方案2】:

    尝试使用这个 [RegularExpression(@"^(?=.\d)(?=.[az])(?=.*[AZ])$")]

    数字应该是 (?=.\d) 而不是(?=. [0-9])

    祝你好运

    【讨论】:

      猜你喜欢
      • 2011-09-19
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 2022-08-19
      • 1970-01-01
      相关资源
      最近更新 更多