0

我一直在尝试让reg_match用户名只接受a-z, A-Z, 0-9, -,_不幸的是我所有的尝试都失败了。

function usernameValidation($username){
    $re =  "/[\w_-]/g";
    return preg_match($re, $username);
}
$username = "skjdasASD345-_adadasda";
if(usernameValidation($username)){
    echo "success!!";
}else{
    echo "Fail!"; //it always return fail.
}

我的代码总是返回失败,谁能告诉我我做错了什么?

4

1 回答 1

0

问题是g修饰符不适用于preg_match; 这就是preg_match_all目的。如果您启用了错误报告(请参阅如何在 PHP 中获取有用的错误消息?),您应该已经看到了如下警告:

警告: preg_match() [function.preg-match]: Unknown modifier 'g' on line #

但是,如果您解决了这个问题,仍然存在您的模式将匹配任何包含单词字符或连字符的任何字符串的问题。它不会关心是否有其他无效字符。

尝试使用此模式

$re = '/^[\w-]+$/';

这将匹配字符串的开头,后跟一个或多个单词字符或连字符,然后是字符串的结尾。

另请注意, 的行为\w因区域设置而异,这意味着允许使用的用户名取决于服务器的配置。如果您真的只想匹配a-zor 0-9,无论语言环境如何,您都应该明确指定这些字符:

$re = '/^[a-z0-9_-]+$/i';

这里的i标志使模式不区分大小写,这意味着它也将允许大写字符。

于 2013-11-09T04:44:28.843 回答