您好我需要使用php的pregmatch来检查字符串是否有效。为了有效,字符串需要至少有一个大写字符,至少一个小写字符,然后至少有一个符号或数字
感谢
答案 0 :(得分:5)
您可以使用前瞻
来实现这一目标^(?=.*[a-z])(?=.*[A-Z])(?=.*[\d,.;:]).+$
前瞻是零宽度断言,这意味着它与字符不匹配,如果声明的断言为真,则从其位置进行检查。所有断言都是单独评估的,因此字符可以按任何顺序排列。
^
匹配字符串的开头
(?=.*[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);