【发布时间】:2014-03-28 04:49:52
【问题描述】:
密码长度必须至少为 8 个字符
密码必须以“a”开头并以“2”结尾
密码必须至少包含两个数字和一个特殊字符(- _ *)
据我所知,我需要使用
preg_match("^a 2$ ?<\d", $string)
订单和满足其余要求我似乎无法做到。正则表达式会是什么样子?
【问题讨论】:
-
阅读正则表达式基础知识(谷歌搜索)。
标签: php regex preg-match
密码长度必须至少为 8 个字符
密码必须以“a”开头并以“2”结尾
密码必须至少包含两个数字和一个特殊字符(- _ *)
据我所知,我需要使用
preg_match("^a 2$ ?<\d", $string)
订单和满足其余要求我似乎无法做到。正则表达式会是什么样子?
【问题讨论】:
标签: php regex preg-match
【讨论】:
我建议使用一些if 语句来分别检查每个条件。如果任何语句失败,您可以取消进一步检查。只有最后两个条件是正则表达式。这样您就可以控制错误处理,例如让用户知道到底出了什么问题:
$string = '...';
if (strlen($string) < 8) {
// too short
}
if ('a' !== substr($string, 0, 1)) {
// first character not "a"
}
if ('2' !== substr($string, -1)) {
// last character not "2"
}
if (2 > preg_match_all('/\d/', $string)) {
// less than 2 numbers
}
if (1 > preg_match_all('/[-_*]/', $string)) {
// no special characters (-_*)
}
【讨论】:
试试这个:
^(?=(.*?\d.*\d))(?=.*?[-_*])a.{6,}2$
【讨论】:
匹配这个
# ^(?=\D*\d\D*\d)(?=.*[-_*])a.{6,}2$
^
(?= \D* \d \D* \d )
(?= .* [-_*] )
a .{6,} 2
$
【讨论】: