Jas*_*son 17 php regex passwords validation
我在网上看到了以下正则表达式.
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$
Run Code Online (Sandbox Code Playgroud)
它只在字符串中有效:
* contain at least (1) upper case letter
* contain at least (1) lower case letter
* contain at least (1) number or special character
* contain at least (8) characters in length
Run Code Online (Sandbox Code Playgroud)
我想知道如何转换这个正则表达式,以便它检查字符串
* contain at least (2) upper case letter
* contain at least (2) lower case letter
* contain at least (2) digits
* contain at least (2) special character
* contain at least (8) characters in length
Run Code Online (Sandbox Code Playgroud)
好吧,如果它包含至少2个上,下,数字和特殊字符,那么我不需要8个字符的长度.
特殊字符包括:
!`〜@#$%^&*()_- + = []\| {} ;:"',/ <>.?
daw*_*awg 64
我不得不同意艾伦.如果现有的正则表达式如此复杂,为什么只在一个正则表达式中尝试呢?
把它分解成平易近人的简单步骤吧.你已经做到了.
现在编写4个正则表达式来验证您的部件,将基本逻辑添加到4个正则表达式并测量字符串的长度.完成.
你宁愿调试哪个,这个:
(?=^(?:[^A-Z]*[A-Z]){2})(?=^(?:[^a-z]*[a-z]){2})(?=^(?:\D*\d){2})(?=^(?:\w*\W){2})^[A-Za-z\d\W]{8,}$
(这不起作用...)
或这个:
function valid_pass($candidate) {
$r1='/[A-Z]/'; //Uppercase
$r2='/[a-z]/'; //lowercase
$r3='/[!@#$%^&*()\-_=+{};:,<.>]/'; // whatever you mean by 'special char'
$r4='/[0-9]/'; //numbers
if(preg_match_all($r1,$candidate, $o)<2) return FALSE;
if(preg_match_all($r2,$candidate, $o)<2) return FALSE;
if(preg_match_all($r3,$candidate, $o)<2) return FALSE;
if(preg_match_all($r4,$candidate, $o)<2) return FALSE;
if(strlen($candidate)<8) return FALSE;
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
为什么人们觉得他们必须写一个没有人能够理解的正则表达式,所以他们可以一次性完成它是超出我的...
好的 - 如果您真的想要一个正则表达式,请了解前瞻以验证您的规则.
这个怪物一次性完成了你的要求:
^ # start of line
(?=(?:.*[A-Z]){2,}) # 2 upper case letters
(?=(?:.*[a-z]){2,}) # 2 lower case letters
(?=(?:.*\d){2,}) # 2 digits
(?=(?:.*[!@#$%^&*()\-_=+{};:,<.>]){2,}) # 2 special characters
(.{8,}) # length 8 or more
$ # EOL
Run Code Online (Sandbox Code Playgroud)
Ala*_*ore 31
适应该正则表达式的最佳方法是将其删除并编写一些代码.所需的正则表达式将是如此漫长而复杂,您在编写它之后两小时就无法读取它.等效的PHP代码将是乏味的,但至少你将能够理解你所写的内容.
顺便说一下,这并不意味着对你的抨击.在大多数情况下,正则表达式几乎不适合密码强度验证,但是您的要求比平常更复杂,而且它不值得.另外,你发布的正则表达式是垃圾.永远不要相信你发现在网络上漂浮的正则表达式.或者任何代码,就此而言.或者,哎呀,什么.: - /
Gum*_*mbo 16
如果你真的想使用正则表达式,试试这个:
(?=^(?:[^A-Z]*[A-Z]){2})(?=^(?:[^a-z]*[a-z]){2})(?=^(?:\D*\d){2})(?=^(?:\w*\W){2})^[A-Za-z\d\W]{8,}$
Run Code Online (Sandbox Code Playgroud)
一些解释:
(?=^(?:[^A-Z]*[A-Z]){2})
测试两次重复,[^A-Z]*[A-Z]
除了大写字母后跟一个大写字母外,是一个零个或多个字符的序列(?=^(?:[^a-z]*[a-z]){2})
(与上面的小写字母相同)(?=^(?:\D*\d){2})
(与上面的数字相同)(?=^(?:\w*\W){2})
(与上面的非单词字符相同,但你可以改变\W
你想要的任何特殊字符的字符类)^[A-Za-z\d\W]{8,}$
测试整个字符串的长度,该字符串仅包含所有其他字符类的并集的字符.