我对正则表达式非常陌生,我进行了研究并稍微了解了我需要的是符合这些规范的密码
- 任何字母字符(至少一个)
- 任何数字字符(至少一个)
- 没有空间
- 特殊字符(0 个或多个)
我要做的是这个
^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)(?!\S)$
匹配 1、2、3 规格但不匹配 4 我在 4 上尝试了不同的东西,但我失败了
谁能帮我 ?
你很亲密。这似乎可以解决您的问题:
preg_match("/^(?=.*[0-9])(?=.*[a-z])(\S+)$/i", $password)
我做了两个改变。
i
通过使用修饰符(不区分大小写)来缩短一点。这允许删除 AZ`。(?!\S)
并没有真正的帮助。相反,您可以简单地使您的实际匹配只包含非空格字符(\S+
)。这也将立即允许您的密码中包含特殊字符(除了空格之外的任何内容)。如果您只想允许特定的一组特殊字符,请将 替换为\S
包含字母、数字和您希望允许的所有字符的字符类。顺便说一句,如果您想确保密码具有一定的最小长度,您可以将其更改+
为{8,}
例如。
不需要奇怪的正则表达式。特别是因为您想确保密码包含或不包含,并且它出现在哪里并不重要:
<?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
);
使用三个单独的正则表达式 - 一个检查是否有字母字符,一个检查是否有数字,一个检查是否没有空格。虽然可以使用单个正则表达式完成所有这些操作,但每个附加条件都会显着增加正则表达式的复杂性。
preg_match("/[a-z]/i", $passwd) && preg_match("/[0-9]/", $passwd) && !preg_match("/ /", $passwd)
似乎是这样的:
^(?=.*[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
;)