jmc*_*ney 4 .net javascript regex
我正在验证ASP.NET MVC3应用程序中复杂性的密码.我目前的要求是它必须包含至少一个大写字母,一个小写字母,一个数字和不超过三个重复字符.我想对这些数字进行概括,并为非字母数字字符添加条件.
目前,我只验证服务器端,因此我可以使用一个正则表达式为每个条件多次调用Regex.IsMatch.我希望能够验证客户端.因为不显眼的jQuery验证只允许一个正则表达式,我需要将所有五个条件组合成一个模式.
我对正则表达式的了解不多,但最近我一直在做一些阅读.我可能会遗漏一些简单的东西,但我无法找到一种方式将多个模式组合在一起 他们会.
您可以在单个正则表达式中使用多个前瞻断言执行此操作(在.NET中):
^(?=.*\p{Lu})(?:.*\p{Ll})(?=.*\d)(?=.*\W)(?!.*(.).*\1.*\1)
Run Code Online (Sandbox Code Playgroud)
如果所有条件都为真,则匹配.
^ # Match the start of the string
(?=.*\p{Lu}) # True if there is at least one uppercase letter ahead
(?=.*\p{Ll}) # True if there is at least one lowercase letter ahead
(?=.*\d) # True if there is at least one digit ahead
(?=.*\W) # True if there is at least one non-alnum character ahead
(?!.*(.).*\1.*\1) # True if there is no character repeated twice ahead
Run Code Online (Sandbox Code Playgroud)
请注意,匹配不会消耗字符串的任何字符 - 如果您希望匹配操作返回您匹配的字符串,请在.*正则表达式的末尾添加.
在JavaScript中,您不能使用Unicode字符属性.所以你可以使用
^(?=.*[A-Z])(?:.*[a-z])(?=.*\d)(?=.*\W)(?!.*(.).*\1.*\1)
Run Code Online (Sandbox Code Playgroud)
这当然只会使用ASCII字母进行验证.如果这对你没问题,那很好.你可以去增加像[A-ZÄÖÜÀÈÌÒÙÁÉÍÓÚ]等等的角色类,但你可能永远不会完成这个.在服务器端,如果您希望验证产生相同的结果,则必须指定RegexOptions.ECMAScript.NET regex引擎的行为类似于JavaScript引擎(感谢Alan Moore注意!).
| 归档时间: |
|
| 查看次数: |
5405 次 |
| 最近记录: |