密码规则正则匹配,另外问题:为什么正则表达式效率低?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了密码规则正则匹配,另外问题:为什么正则表达式效率低?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1029字,纯文字阅读大概需要2分钟。
内容图文
![密码规则正则匹配,另外问题:为什么正则表达式效率低?](/upload/InfoBanner/zyjiaocheng/152/0ca24feea7ef4b4c97b8f6983e259d32.jpg)
密码格式:6-16位数字字母组合
不包含特殊字符。
必须同时包含数字、大写字母,小写字母3种字符,区分大小写。
连续3位及以上数字不能连续(例如123、876)
连续3位及以上的字母不能连续(例如abc、cba、aaa、111、AAA)
echo !preg_match('/\d{3,}|[a-zA-Z]{3,}/', $password);
echo preg_match('/\d+/', $password);
echo preg_match('/[a-z]+/', $password);
echo preg_match('/[A-Z]+/', $password);
echo preg_match('/^([a-zA-Z0-9]){6,16}$/', $password);
以上是需求和我想出来的解决方法
但是总想能用更简洁的方式来匹配出来,希望有人能有更好的思路。
再问个问题:为什么正则表达式效率低?
因为连续的数字,字母用正则表达式判断太复杂而且效率低,所以采用逻辑代码判断的方式,一下是我用PHP写的代码,php5.5.12 初步测试成功。
/**
* 密码格式:6-16位数字字母组合
* 不包含特殊字符。
* 必须同时包含数字、大写字母,小写字母3种字符,区分大小写。
* 连续3位及以上数字不能连续(例如123、876)
* 连续3位及以上的字母不能连续(例如abc、cba)
* @param string $password
* @return boolean 是否匹配
*/
function CheckPassword($password){
if (strlen($password) > 16 || strlen($password) < 6) {
return false;
}
// ASCII code vallue
$upperLetter = range(65, 90);
$lowerLetter = range(97, 122);
$number = range(48, 57);
$includeNumber = false;
$includeUpperLetter = false;
$includeLowerLetter = false;
$continuousCharNum = 0;
for ($i=0; !empty($password[$i]); $i++) {
// 特殊字符
if (!in_array(ord($password[$i]), array_merge($upperLetter, $lowerLetter, $number))) {
return false;
}
// 大写字母
if (!$includeUpperLetter && in_array(ord($password[$i]), $upperLetter)) {
$includeUpperLetter = true;
}
// 数字
if (!$includeNumber && in_array(ord($password[$i]), $number)) {
$includeNumber = true;
}
// 小写字母
if (!$includeLowerLetter && in_array(ord($password[$i]), $lowerLetter)) {
$includeLowerLetter = true;
}
if ($i != 0 && !empty($password[$i+1])
&& abs(ord($password[$i]) - ord($password[$i-1])) <= 1 && ord($password[$i]) - ord($password[$i-1]) == ord($password[$i+1]) - ord($password[$i])) {
return false;
}
}
if ($includeLowerLetter && $includeNumber && $includeUpperLetter) {
return true;
} else {
return false;
}
}
内容总结
以上是互联网集市为您收集整理的密码规则正则匹配,另外问题:为什么正则表达式效率低?全部内容,希望文章能够帮你解决密码规则正则匹配,另外问题:为什么正则表达式效率低?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。