日期:2014-05-16  浏览次数:20387 次

关于验证中文的正则表达式
我想验证用户名,用户名如果是中文最大是5个汉字,如果是英文最大是10个。我知道只有中文或者只有英文是这样写的
^[\u4e00-\u9fa5]{1,5}$|^[\dA-Za-z_]{1,10}$
,但是如果中文和英文混合的话该怎么写?比如“发表新话题”这五个字是最大值,“话题区1234”是最大值。这种正则表达式怎么写?谢谢

------解决方案--------------------
这样要分开,验证长度和验证格式分开
如果要一起,就要分几种情况,光靠正则实现不了
------解决方案--------------------
还是用一般函数比较吧,正则有难度。一个字符一个字符判断,英文+1,中文+2,然后判断总数是否超标。
------解决方案--------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script type="text/javascript">
var creg=/[\u4e00-\u9fa5]/;
var ereg=/[a-zA-Z1-9]/;
var str='话题区1234';
var l=0;
for(var i=0;i<str.length;i++){
if(creg.test(str.charAt(i))){
l+=2;
}else if(ereg.test(str.charAt(i))){
l+=1;
}else{
alert("error");
break;
}
}
alert(l);
</script>
</head>

<body>
</body>
</html>
貌似纯正则的话很难实现