//中文和英文结合而且6-20字符

$preg='/^[a-zA-Z\x{4e00}-\x{9fa5}]{6,20}$/u';
//英文、数字、下划线6-20位字符
$preg='/^[\w\_]{6,20}$/u';

过滤非法字符防止SQL注入漏洞,只能另说,对不同的接口和参数有针对性的过滤,没有通用的正则。


用户名改成纯英文或者纯中文


<?php
//中文和英文结合而且6-20字符
$name='aa中aassd';

$preg='/^[a-zA-Z\x{4e00}-\x{9fa5}]{6,20}$/u';
$preg2='/^[a-zA-Z]+$/u';
$preg3='/^[\x{4e00}-\x{9fa5}]+$/u';

if(preg_match($preg2,$name) || preg_match($preg3,$name)){
echo "错误";//纯中文或纯英文
}elseif(preg_match($preg,$name)){
echo "OK";//中文结合,因为前面排除纯中文或者纯因为
}else{
echo "错误";
}

//英文、数字、下划线6-20位字符
$preg='/^[\w\_]{6,20}$/u';
?>