Products
GG网络技术分享 2025-03-18 16:15 7
我在做表单验证。对于这个名字的限定是:最多50个中文或100位以内的数字或100个以内的英文字母。例如:张三001ab,李四ac……可以3种都包含,顺序不限,但至少要有一种。请问这个正则该怎么写呢?我把代码写到了这步,可以输入的最大整体字节数是300,但是如果只输入200个数字,现在不会出现提示,实际上是不对的。数字最多只能输入100个。
<input class=\"span5\" type=\"text\" id=\"name\" /><span class=\"help-inline c-81f\" style=\"display:none;\">1~50个中文字或100位字母或数字</span>var oBtnSub=document.getElementById(\'submit\');
var oTxtNa=document.getElementById(\'name\');
var oSpanNa=oTxtNa.nextElementSibling || oTxtNa.nextSibling;
oBtnSub.onclick=function(){
var reName=/[^(a-zA-Z0-9\\u4e00-\\u9fa5)]/g;
if(reName.test(oTxtNa.value)){
alert(\'包含非法字符!\');
}
else{
var reDou=/[^\\x00-\\xFF]/g;
var iByte=oTxtNa.value.replace(reDou,\'**\').length;
if(iByte>300){
oSpanNa.style.display=\'inline-block\';
}
else if(iByte==0){
oSpanNa.style.display=\'inline-block\';
}
else{
oSpanNa.style.display=\'none\';
}
}
谢谢大家的回答!我对代码进行了修改,现在已经能够满足需求了(为了便于测试,我限定最多中文4个、英文4个、数字4个)。不过感觉有些繁琐,还能更简单一些吗?
var reName=/[^(a-zA-Z0-9\\u4e00-\\u9fa5)]/g;if(reName.test(oTxtNa.value)){
alert(\'包含非法字符!\');
oSpanNa.style.display=\'inline-block\';
}
else{
var reNum=/\\d/g;
var reLet=/[a-zA-Z]/g;
var reDou=/[^\\x00-\\xFF]/g;
var sChi=oTxtNa.value.replace(reDou,\'**\');
var reStar=/\\*/g;
var matNum=oTxtNa.value.match(reNum);
var matLet=oTxtNa.value.match(reLet);
var matSta=sChi.match(reStar);
if((matNum!=null && matLet!=null && matSta!=null) && (matNum.length>4 || matLet.length>4 || matSta.length>8)){
oSpanNa.style.display=\'inline-block\';
}
else if((matNum==null && matLet!=null && matSta!=null) && (matLet.length>4 || matSta.length>8)){
oSpanNa.style.display=\'inline-block\';
}
else if((matLet==null && matNum!=null && matSta!=null) && (matNum.length>4 || matSta.length>8)){
oSpanNa.style.display=\'inline-block\';
}
else if((matSta==null && matNum!=null && matLet!=null) && (matNum.length>4 || matLet.length>4)){
oSpanNa.style.display=\'inline-block\';
}
else if((matNum==null && matLet==null && matSta!=null) && matSta.length>8){
oSpanNa.style.display=\'inline-block\';
}
else if((matNum==null && matSta==null && matLet!=null) && matLet.length>4){
oSpanNa.style.display=\'inline-block\';
}
else if((matLet==null && matSta==null && matNum!=null) && matNum.length>4){
oSpanNa.style.display=\'inline-block\';
}
else if(matNum==null && matLet==null && matSta==null){
oSpanNa.style.display=\'inline-block\';
}
else{
oSpanNa.style.display=\'none\';
}
}
判断字数这个比较难,变通的办法是把中文替换成两个英文(任意字母),然后统一判断
这个用正则比较复杂,直接比较下长度就行了,有时候最简单的办法最有效
我觉得你个思路是不是不要局限于正则表达式,这种从扩充和易读性来说,完全可以把输入串做一下统计有多少个中文,多少个英文,多少个数字,然后怎么组合什么规则对于后期改动和扩充来说也相对容易。
直接用字节数来判断吧,这样简单点
本文转自资源分享网
Demand feedback