我对正则表达非常新,我做了一个研究并得到了一点了解 我需要的是一个符合这些规范的密码
我得到的是这个
^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)(?!\S)$
匹配1,2,3规格但不匹配4 我在4上尝试了不同的东西,但是我失败了
任何人都可以帮助我吗?
答案 0 :(得分:6)
你非常接近。这似乎可以解决您的问题:
preg_match("/^(?=.*[0-9])(?=.*[a-z])(\S+)$/i", $password)
我做了两处修改。
i
修饰符(匹配大小写不敏感)稍微缩短一下。这允许删除A-Z`。(?!\S)
在这里并没有真正帮助。相反,您可以简单地使您的实际匹配仅包含非空格字符(\S+
)。这也将立即允许您的密码中的特殊字符(实际上是空格的任何内容)。如果您只想允许某组特殊字符,请将\S
替换为包含字母,数字和您想要允许的所有字符的字符类。顺便说一句,如果您想确保密码具有特定的最小长度,则可以将+
更改为{8,}
。
答案 1 :(得分:3)
不需要一个奇怪的正则表达式。特别是因为您要确保密码包含或不包含,并且无论它出现在何处都无关紧要:
<?php
/**
* Validates the password:
* * Has at least one alphabet character
* * Has at least one digit
* * Has no spaces
*
* @param string $password Password to validate
*
* @return bool Whether $password is valid or not.
*/
function validate_password($password) {
//If no alphabet characters found, return false.
if (!preg_match("/[a-z]/i", $password)) {
return false;
}
//If no digits found, return false.
if (!preg_match("/[0-9]/", $password)) {
return false;
}
//If a space is found, return false.
if (strpos($password, " ") !== false) {
return false;
}
//Special characters are optional, so no checking.
//If nothing happened so far, the password is valid. Return true.
return true;
}
var_dump(
validate_password("test"), //False, no digits
validate_password("test123 test"), //False, space
validate_password("123456"), //False, no alphabet
validate_password("test1234") //True
);
答案 2 :(得分:1)
使用三个单独的正则表达式 - 一个用于检查是否存在字母字符,一个用于检查是否存在数字,另一个用于检查是否存在空格。虽然可以使用单个正则表达式完成所有操作,但每个附加条件都会显着增加正则表达式的复杂性。
preg_match("/[a-z]/i", $passwd) && preg_match("/[0-9]/", $passwd) && !preg_match("/ /", $passwd)
答案 3 :(得分:0)
似乎是这样的:
^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S*$)(?=[0-9a-zA-Z.,;~!@#$%^&*()\-+=\\\]+$)
添加您需要的所有特殊字符。
修改:回复一些评论,这是测试运行的结果:
<?php
$re = '/^(?=.*[0-9])(?=.*[A-Z])(?=\S*$)(?=[0-9a-zA-Z.,;~!@#$%^&*()\-+=\\\]+$)/';
$s = 'A2x.';
echo preg_match($re, $s);
?>
在Ubuntu下使用CLI进行测试:
me@mymachine$ php _.php
1
它取决于0
的值1
或$s
;)