钻石星辰4 2015-04-06 10:33 采纳率: 57.1%
浏览 1767
已采纳

求教一个关于个人主页名称的正则表达式

我在做表单验证。对于这个名字的限定是:最多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';
      }
    }
  • 写回答

4条回答 默认 最新

  • threenewbee 2015-04-06 13:20
    关注

    判断字数这个比较难,变通的办法是把中文替换成两个英文(任意字母),然后统一判断

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 visionmaster启动失败,提示为“机器不满足授权而被禁用”
  • ¥50 用logisim设计16位单时钟周期cpu
  • ¥15 IDEA中圈复杂度如何具体设置
  • ¥50 labview采集不了数据
  • ¥15 请上面代码做什么处理或什么混淆
  • ¥15 英雄联盟自定义房间置顶
  • ¥15 W5500网线插上无反应
  • ¥15 如何用字典的Key,显示在WPF的xaml中
  • ¥15 weautomate读取Excel表格信息然后填写到网页一直报错,如何解决?
  • ¥15 C#如何在Webview2中获取网页验证码