2012-08-08 105 views
8

我想创建一个preg_match函数来验证我的密码,但我不确定如何编写它以允许使用以下特殊字符:[email protected]#$%

if(!preg_match(?????)$/', $password)) 

下面是我要工作到正则表达式我的密码规则:

  • 可能含有字母和数字
  • 必须至少包含1个数字和1个字母
  • 可以包含任何的这些字符:[email protected]#$%
  • 必须是8-12个字符

感谢您提供任何帮助。

+2

请考虑允许更长的密码,我更喜欢我的是20 +字符长,它不会伤害你,让这个。我不明白具有最大长度的网站 - 您将它们存储为散列,那么问题是什么? – 2012-08-08 22:24:27

+0

@Dragon我把最多可以增加到50个字符。这是一个简单的网站,我想我只是想让8-12个字符让人们更容易记住,而不太可能需要重置密码。但正如你所说,密码被加密后,这真的不是什么大问题。 – 2012-08-09 00:36:40

+0

我让lastpass记住我的所有密码:-) – 2012-08-09 02:34:20

回答

41

我想这应该看起来像:

if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[[email protected]#$%]{8,12}$/', $password)) { 
    echo 'the password does not meet the requirements!'; 
} 

开始之间 - >^
而结束 - >$
字符串的 必须有至少一个数字 - >(?=.*\d)
和至少一个字母 - >(?=.*[A-Za-z])
它必须是数字,字母或以下其中一个:!@#$% - >[[email protected]#$%]
还有必须在8-12个字符 - >{8,12}

至于user557846评论你的问题,我也建议你,让更多的人物,我通常(如果我使用最多)至少需要50 :)

顺便说一句,你可能想看看this regex tutorial

+3

谢谢!这对我有用。并感谢你解释它的每一部分。这真的帮助我更好地理解这一点。我还探讨了你建议的教程,这看起来像是一个很好的资源,下次我正在处理正则表达式。我制作了最多50个字符。 – 2012-08-09 00:33:08

-1

查找字符类,正则表达式的基本功能。

+0

谢谢你指引我朝着正确的方向。 – 2012-08-09 00:34:00

+0

这是边界不是答案,特别是比较接受的答案。也许你可以扩展它,而不是只是告诉别人去寻找某些东西。谢谢。 – Kev 2012-08-09 21:42:15

-1
if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[[email protected]#$%]{8,12}$/', $password)) { 
    echo 'the password does not meet the requirements!'; 
    } 

在上面的语句..什么可能的口令从而存在?

+0

请帮助我..因为我输入了不同的字符但它不存在..“密码不符合要求! – christine 2014-03-17 06:01:06

+0

if(!preg_match('/ ^(?=。* \ d)(?=。* [0-9A-Za-z!@#$%] {8,12} $ /',$ password)){ echo'密码不符合要求!'; } – christine 2014-03-17 07:24:01

+0

在上面的语句...是任何机构可以给我一个适合我的“preg_match密码”的密码..因为我输入dffernt密码组合,但它不能提交.. – christine 2014-03-17 07:27:23

6
preg_match('/^(?=.*\d)(?=.*[@#\-_$%^&+=§!\?])(?=.*[a-z])(?=.*[A-Z])[[email protected]#\-_$%^&+=§!\?]{8,20}$/',$password) 
  • 至少一个小写字符
  • 至少一个大写字符
  • 至少一个数字
  • 至少一个@#$ -_特殊标志%^ & + =§! ?
+0

托马斯的答案比r3bel的更好地解释。 – Alreadytakenindeed 2017-12-17 02:23:04

0

我已经用我的drupal自定义表单在hook_form_validate这里做了这个密码应该是6个字母的字母,数字和至少一个特殊字符。

<? 
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[[email protected]#$%])[[email protected]#$%]{6,15}$/', $form_state['values']['pass'])) { 
    form_set_error('pass', t('Password must contain 6 characters of letters, numbers and at least one special character.')); 
} 
?> 
1

我已经制定了一个稍微复杂一些检查

/^(?=.*\d)(?=.*[A-Za-z])(?=.*[A-Z])(?=.*[a-z])(?=.*[ !#$%&'\(\) * +,-.\/[\\]^_`{|}~\"])[0-9A-Za-z !#$%&'\(\) * +,-.\/[\\]^_`{|}~\"]{8,50}$/ 

基本上我检查密码有1位,资本,1个和特殊字符,一个完整的正则表达式。我希望这可以帮助寻找正则表达式的人。

0
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[[email protected]#$%])[[email protected]#$%] 
{6,15}$/',($_POST['password']))) { 
    $message='Password must contain 6 characters of letters, numbers and 
    at least one special character.'; 
} 
+0

你应该更清楚。 – 2017-01-11 07:44:40

2

我喜欢r3bel的答案,所以我有一个发挥与它结束了以下内容作为密码检查功能:

function password_strength_check($password, $min_len = 8, $max_len = 70, $req_digit = 1, $req_lower = 1, $req_upper = 1, $req_symbol = 1) { 
    // Build regex string depending on requirements for the password 
    $regex = '/^'; 
    if ($req_digit == 1) { $regex .= '(?=.*\d)'; }    // Match at least 1 digit 
    if ($req_lower == 1) { $regex .= '(?=.*[a-z])'; }   // Match at least 1 lowercase letter 
    if ($req_upper == 1) { $regex .= '(?=.*[A-Z])'; }   // Match at least 1 uppercase letter 
    if ($req_symbol == 1) { $regex .= '(?=.*[^a-zA-Z\d])'; } // Match at least 1 character that is none of the above 
    $regex .= '.{' . $min_len . ',' . $max_len . '}$/'; 

    if(preg_match($regex, $password)) { 
     return TRUE; 
    } else { 
     return FALSE; 
    } 
} 

最大/最小长度是默认或可调,每一个需求是默认开启的,但可以关闭,并且我想支持任何符号,所以最后的要求是“任何不属于上述类型的东西”,而不是固定的一组符号。