要写一个正则表达式,用js验证一个字符串
要满足如下三个条件:
1.该字符串只能包括字母和数字,
2.至少有一个字母和一个数字
3.整个字符串长度在6到18,
只能写成一个正则表达式

解决方案 »

  1.   

    还算有一种方案,我想出来的,但很长,如下:^[a-zA-Z]\d[a-zA-Z0-9]{4,16}$|^[a-zA-Z][a-zA-Z0-9]\d[a-zA-Z0-9]{3,15}$|^[a-zA-Z][a-zA-Z0-9]{2}\d[a-zA-Z0-9]{2,14}$|^[a-zA-Z][a-zA-Z0-9]{3}\d[a-zA-Z0-9]{1,13}$|^[a-zA-Z][a-zA-Z0-9]{4}\d[a-zA-Z0-9]{0,12}$|^[a-zA-Z][a-zA-Z0-9]{5}\d[a-zA-Z0-9]{0,11}$|^[a-zA-Z][a-zA-Z0-9]{6}\d[a-zA-Z0-9]{0,10}$|^[a-zA-Z][a-zA-Z0-9]{7}\d[a-zA-Z0-9]{0,9}$|^[a-zA-Z][a-zA-Z0-9]{8}\d[a-zA-Z0-9]{0,8}$|^[a-zA-Z][a-zA-Z0-9]{9}\d[a-zA-Z0-9]{0,7}$|^[a-zA-Z][a-zA-Z0-9]{10}\d[a-zA-Z0-9]{0,6}$|^[a-zA-Z][a-zA-Z0-9]{11}\d[a-zA-Z0-9]{0,5}$|^[a-zA-Z][a-zA-Z0-9]{12}\d[a-zA-Z0-9]{0,4}$|^[a-zA-Z][a-zA-Z0-9]{13}\d[a-zA-Z0-9]{0,3}$|^[a-zA-Z][a-zA-Z0-9]{14}\d[a-zA-Z0-9]{0,2}$|^[a-zA-Z][a-zA-Z0-9]{15}\d[a-zA-Z0-9]{0,1}$|^[a-zA-Z][a-zA-Z0-9]{16}\d$|^\d[a-zA-Z][a-zA-Z0-9]{4,16}$|^\d[a-zA-Z0-9][a-zA-Z][a-zA-Z0-9]{3,15}$|^\d[a-zA-Z0-9]{2}[a-zA-Z][a-zA-Z0-9]{2,14}$|^\d[a-zA-Z0-9]{3}[a-zA-Z][a-zA-Z0-9]{1,13}$|^\d[a-zA-Z0-9]{4}[a-zA-Z][a-zA-Z0-9]{0,12}$|^\d[a-zA-Z0-9]{5}[a-zA-Z][a-zA-Z0-9]{0,11}$|^\d[a-zA -Z0-9]{6}[a-zA-Z][a-zA-Z0-9]{0,10}$|^\d[a-zA-Z0-9]{7}[a-zA-Z][a-zA-Z0-9]{0,9}$|^\d[a-zA-Z0-9]{8}[a-zA-Z][a-zA-Z0-9]{0,8}$|^\d[a-zA-Z0-9]{9}[a-zA-Z][a-zA-Z0-9]{0,7}$|^\d[a-zA-Z0-9]{10}[a-zA-Z][a-zA-Z0-9]{0,6}$|^\d[a-zA-Z0-9]{11}[a-zA-Z][a-zA-Z0-9]{0,5}$|^\d[a-zA-Z0-9]{12}[a-zA-Z][a-zA-Z0-9]{0,4}$|^\d[a-zA-Z0-9]{13}[a-zA-Z][a-zA-Z0-9]{0,3}$|^\d[a-zA-Z0-9]{14}[a-zA-Z][a-zA-Z0-9]{0,2}$|^\d[a-zA-Z0-9]{15}[a-zA-Z][a-zA-Z0-9]{0,1}$|^\d[a-zA-Z0-9]{16}[a-zA-Z]$不知道哪位大侠有更好的方案
      

  2.   

     /(?=.*\d)(?=.*[a-zA-Z])^[a-zA-Z\d]{6,18}$/
      

  3.   

    <script>
    function check(str){
    //var reg=/(?!(?!\d+)\d|(?![a-zA-Z]+)[a-zA-Z])[0-9a-zA-Z]{6,18}/g;
    var reg=/^\d(?=[0-9a-zA-Z]*[a-zA-Z][0-9a-zA-Z]*)[0-9a-zA-Z]{5,17}|[a-zA-Z](?=[0-9a-zA-Z]*\d[0-9a-zA-Z]*)[0-9a-zA-Z]{5,17}$/g
    alert(reg.test(str));
    }
    </script>
    <input onblur="check(this.value);"/>
    你再测试下看看,可能还有问题。
      

  4.   

    var s=/(?=.*\d)(?=.*[a-zA-Z])^[a-zA-Z\d]{6,18}$/;
    alert(s.test("111111111111111e"));
    显示false
    你怎么测的?
      

  5.   

    显示false?
    我显示true
      

  6.   

    我怀疑和IE版本号有关系,我的是IE6,你的呢?
      

  7.   

    用IE6测试/(?=.*\d)(?=.*[a-zA-Z])^[a-zA-Z\d]{6,18}$/
    "11111a1234"   false
    "11111a12345"  true改成 /^\d(?=.*[a-zA-Z])[a-zA-Z\d]{6,18}$/ 也是一梓,明显是IE6的预搜索实现有问题。前阵子才在主页看到说中国仍然大量使用IE6,是否在网页中都不能使用预搜索了?
      

  8.   

    ie的预查和量词是有bug的
    实际上这里的
    {6,18}
    量词
    它是从预查里的lastIndex开始计算的。
    就是
    a这个位置前面的那个位置,所以显然是false。针对这个问题,可以变通解决。
    虽然说看着山寨,但是可以用如下。/^(?=[a-zA-Z0-9]{6,18}$)(?=.*[0-9])(?=.*[a-zA-Z])///demo
    javascript:alert(function (regex) { return regex.test('11111a1234') && regex.test('11111a12345') }(/^(?=[a-zA-Z0-9]{6,18}$)(?=.*[0-9])(?=.*[a-zA-Z])/));
    还有在ff某版本中,\d也是有差异的,那个版本\d支持的是unicode的就是说全角的数字也是支持的沉入