标签: php regex
我需要一个用于用户名和密码验证的正则表达式。对于用户名我想允许A-Z a-Z 0-9和这些特殊字符:@:.我试图使用它:
@:.
if(preg_match('/[A-Za-z0-9@:.]/', $username)) { $this->err = 'error'; }
但那不起作用。对于密码,我希望他们至少有一个大写的小写和一个数字。
答案 0 :(得分:1)
您需要anchor您的模式并使用前瞻来验证这些情况。
if(preg_match('/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9@:.]+$/', $username)) { ... }
(?= ... )是零宽度断言,不消耗字符串上的任何字符。
(?= ... )
因此,它只匹配字符串中的位置。零宽度的点是验证正常表达式是否能够或者不能与当前位置相匹配,而不会增加整体匹配。