首页 文章

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

提问于
浏览
2

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

谢谢

4 回答

  • 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));
    

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

  • 0

    您可以通过使用前瞻来实现这一目标

    ^(?=.*[a-z])(?=.*[A-Z])(?=.*[\d,.;:]).+$
    

    看到它here on Regexr

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

    ^ 匹配字符串的开头

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

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

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

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

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

  • 5

    根据你的要求:

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

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

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

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

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

  • 0

    如果你想要这些不一定是有序的,你需要一个前瞻 . 以下表达式将验证至少一个较低的char,一个较高的char和一个数字:

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

    你可以把很多特殊的字符加上数字,如下所示:

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

相关问题