Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RegEx reg_匹配用户名匹配_Javascript_Php_Html_Regex - Fatal编程技术网

Javascript RegEx reg_匹配用户名匹配

Javascript RegEx reg_匹配用户名匹配,javascript,php,html,regex,Javascript,Php,Html,Regex,我一直在尝试对用户名进行reg\u匹配,以便只接受a-z、a-z、0-9、-和,不幸的是,我所有的尝试都失败了 function usernameValidation($username){ $re = "/[\w_-]/g"; return preg_match($re, $username); } $username = "skjdasASD345-_adadasda"; if(usernameValidation($username)){ echo "succes

我一直在尝试对用户名进行
reg\u匹配,以便只接受
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.
}

我的代码总是返回fail,有人能告诉我我做错了什么吗?

问题是
g
修饰符不能使用;这就是为什么。如果启用了错误报告(请参阅),您应该会看到一条关于此问题的警告,内容如下:

警告:preg_match()[function.preg match]:行中未知修饰符“g”#

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

尝试使用这种模式

$re = '/^[\w-]+$/';
这将匹配字符串的开头,后跟一个或多个单词字符或连字符,后跟字符串的结尾

还要注意,
\w
的行为因区域设置而异,这意味着允许使用哪些用户名取决于服务器的配置。如果确实只想匹配
a-z
0-9
,而不考虑语言环境,则应明确指定这些字符:

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

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

Awesome!!非常感谢。这是完美的:)@mario这里真正的问题是OP特定平台的一个怪癖。这个问题太笼统了。@p.s.w.g我们有几百个问题。我看不到这里的新奇之处或研究成果。@mario那么它可以合法地作为其中一个问题的复制品关闭。我不是说它不应该被关闭;我只是觉得,处理平台特定问题的问题不应该被标记为一个非常一般的问题的重复,而这个问题并没有解决这个问题。@p.s.w.g我在这里看到OPs的主要问题是,在看到代码反复出现错误后,没有启用
错误报告
。这将揭示一个关于JS和PCRE语法差异的警告。但事实上,还有更确切的参考资料(某处…)@mario你是对的,这也是一个潜在的问题,为了完整性,我应该在回答中提到这一点。