javascirpt做一个正则校验地址,
1.要求16到150字符,
2.只允许输入中文,数字,字母,(),-,#
3.字符统一为大写
4.数字及字母都要求半角控制
关键是4点 ,做半角控制后就不能输入中文(中文也是全角),怎样做一个英文字母和数字的半角控制呢??

解决方案 »

  1.   

    正则不是万能的,
    即便完成了lz的需求,
    也是估计也是超级复杂,以后的人不容易看得懂,也不好进行维护所以直接建议lz放弃正则,直接用普通判断语句吧。随便说两句后飘~~过顶good luck
      

  2.   

    用mootools框架写的, 怎么判断这些全角字符是中文呢???  这是关键 我现在区分不了中文和全角
      

  3.   

     全半角的验证通过css样式可以实现的好像
      

  4.   

    针对第四条的简单测试 ,剩下的你自己想想吧var s = "bABD1232232";
    var strCode;
    for(var i=0;i<s.length;i++)
    {
         strCode = s.charCodeAt(i);
        if((strCode>65248)||(strCode==12288)) //12288是空格
         {
             alert("有全角!");
            break;
         }
    }
      

  5.   

      想通过ascii码表 控制 ,选择a~z(a~z) 括号内就是要控制的不允许输入的全角字母,谁有心得~!
      

  6.   

    http://hi.baidu.com/%CE%DE%B3%A3%C2%D3%D3%B0/blog/item/1d48b795c341060bd31b7075.html具体在这个链接里,具体我还没试过
      

  7.   

    checkLinkAddr:function(el){
    //全角判断
    var otcl=($(el).value).replace(/[\u4e00-\u9fa5-]/g,"") ;
    var re= /[^\x00-\x80]/;   
    if(re.test(otcl)){
    el.errors.push(this.options.alerts.quanjiao);
    return false;
    }
    //格式验证
    var reg1=/^[A-Za-z0-9\u4e00-\u9fa5-\#\(\)\(\)-]{4,150}$/ig;
    if(!reg(reg1,el)){
    el.errors.push(this.options.alerts.checkaddress);
    return false;
    }
    //长度验证
    var len=($(el).value).replace(/[\u4e00-\u9fa5-]/g,"aa").length ;
    if(len<16||len>150){
    el.errors.push(this.options.alerts.lengthExceed.replace("%1",16).replace("%2",150));
    return false;
    }
    //转为大写
    $(el).value=$(el).value.toUpperCase();
    },