正则没有写好,请教一条php的正则表达式.
用户名验证.只需中文  英文 数字 _ @  英文部分大小写  _不能作为用户名开头
//检测用户名是否合法
$reg="/^[\w\x80-\xff]+$/i";  
if(!preg_match($reg,$userInfo[1])){ 
echo "<font color=blue>用户名又不合法。跳过</font><hr />";
continue; 
}
测试了一下这个,发现全角符号还是没有办法判断.

解决方案 »

  1.   

    if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_@]+$/u",$user['username'])){ 这个也不正确.要回去上学了!
      

  2.   

    $userInfo[1] = "_@yyg中国yyg";
    $preg = "/^[A-Za-z0-9@\x{4e00}-\x{9fa5}]{1}[\w@\x{4e00}-\x{9fa5}]*$/u";//utf-8编码环境下
    if(preg_match($preg,$userInfo[1])){ echo "ok"; }else
    {
    echo "<font color=blue>用户名不合法。跳过</font><hr />";
    }
      

  3.   

    建议 LZ 用 js 验证
      

  4.   

    $rs = preg_match("/^([\x7f-\xffa-zA-Z0-9]+[_]?[\x7f-\xffa-zA-Z0-9]+)+[@]?([\x7f-\xffa-zA-Z0-9]+[_]?[\x7f-\xffa-zA-Z0-9]+)+$/", '8kl_中@5sd文');if($rs == true)
    {
        print('符合要求');
    }
    else
    {
        print('有非法的字符');
    }试试这个...
      

  5.   

    $rs = preg_match("/^([\x7f-\xffa-zA-Z0-9]+[_]?[\x7f-\xffa-zA-Z0-9]+)+[_@]?([\x7f-\xffa-zA-Z0-9]+[_]?[\x7f-\xffa-zA-Z0-9]+[_]?)+$/", $username);
    if($rs == true)
    {
        print('符合要求');
    }
    else
    {
        print('有非法的字符');
    }又改了一下...