php regex需要检查字符串是否至少有一个大写字符,一个小写字母和一个数字或符号

时间:2011-12-15 13:42:20

标签: php regex

您好我需要使用php的pregmatch来检查字符串是否有效。为了有效,字符串需要至少有一个大写字符,至少一个小写字符,然后至少有一个符号或数字

感谢

4 个答案:

答案 0 :(得分:5)

您可以使用前瞻

来实现这一目标
^(?=.*[a-z])(?=.*[A-Z])(?=.*[\d,.;:]).+$

here on Regexr

前瞻是零宽度断言,这意味着它与字符不匹配,如果声明的断言为真,则从其位置进行检查。所有断言都是单独评估的,因此字符可以按任何顺序排列。

^匹配字符串的开头

(?=.*[a-z])检查字符串中的某个地方是否为小写字符

(?=.*[A-Z])检查字符串中的某个字符是否为大写字符

(?=.*[\d,.;:])检查字符串中的某个位置是否为数字或其他字符之一,添加所需的字符。

.+$匹配字符串直到字符串结尾

只要其中一个断言失败,完整的正则表达式就会失败。

答案 1 :(得分:3)

如果匹配必须符合您所描述的顺序,则可以使用

$result = preg_match('/[A-Z]+[a-z]+[\d!$%^&]+/', $string);

如果角色可以按任何顺序排列,我不太确定,不进行三次单独的检查:

$result = (preg_match('/[A-Z]+/', $string) && preg_match('/[a-z]+/', $string) && preg_match('/[\d!$%^&]+/', $string));

正如人们在下面指出的那样,你可以用一个前瞻的方式在一个正则表达式中完成这一切。

答案 2 :(得分:0)

根据您的要求:

[A-Z]+匹配任何大写字符

[a-z]+匹配任何小写字符

[\d§$%&]+匹配数字或特殊字符(如果需要,可添加更多特殊字符)

结果如下所示:[A-Z]+[a-z]+[\d§$%&]+

但这并不理想。您可能需要查看Regexr并尝试使用哪种正则表达式符合您的要求。

答案 3 :(得分:0)

如果你想要这些不一定是有序的,你需要一个先行。以下表达式将验证至少一个低级字符,一个高级字符和一个数字:

$result = preg_match('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])', $string);

你可以在这些数字上放置很多特殊的字符:

$result = preg_match('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9$%])', $string);