javascript 利用正则表达式验证容易出现的小疑点

javascript 利用正则表达式验证容易出现的小问题
   新手一个而已,不足之处还望和各位大神斧正。大笑

   今天在练习javascript利用正则表达式验证时遇到了一点问题,就是无法正确匹配,提交表单不成功。当时是这么写的:

<script type="text/javascript">
        function Check(){
            var txtnum=document.getElementById("txtNum").value;
            if(txtnum != null && txtnum != undefined && txtnum != ""){
                if(checkValue(txtnum)){
                    alert("登陆成功");
                    return true;
                }else{
                    alert("登陆失败");
                    return false;
                }
            }
        }
        function checkValue(txtnum){
                var reg=new RegExp("/^[a-z]\d{4}$/");
        //var reg=new RegExp("^[a-z]\d{4}$");//当时这样测试也不行
                var result=reg.test(txtnum);
                return result;
        }
</script>

    经过查看资料之后发现了一个很容易忽略小地方:

        var reg=new RegExp("/^[a-z]\d{4}$/");

错误就在与双引号,应该是:

        var reg=new RegExp(/^[a-z]\d{4}$/);  这是用 \ 括起来, 或者:   

        var reg=new RegExp("^[a-z]\\d{4}$");  如果使用双引号括起来的话就需要将特殊字符转义,比如这里的 \d  就要转义为 \\d

也就是说:""  与  / 不共存。有 " " 没 \ ,有 \ 没 "" 。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我们要想验证字符串是否符合预定要求,可以利用RegExp的test()方法,或者使用字符串的match()方法:  一、match()方法:

        这个在java上也有,参数实际上就是一个正则表达式(包括str.replace("xxxx","XXX")方法里面的参数也可以是正则。API手册)      

            var reg=new RegExp(/^[a-z]\d{4}$/);  //开头是字母,后跟4个数字,另外一种书写方式:
            result=txtnum.match(reg)

或者:

            result=txtnum.match(/^[a-z]\d{4}$/);

 即不用创建RegExp对象
       
        注意,如果利用match没有找到匹配值,那么返回null,根据这个特点进行条件判断即可
        
        PS1:我们在w3cshool上看例子时它部分例子是如下这么写的:       

                   var patt1 = new RegExp("W3School");

              

                这里面的正则表达式使用双引号包含的,即格式类似于:"xxxxxxx"  ; 还有的是利用反斜杠,即格式类似于:/xxxxxxx/ 样式
                建议使用双反斜杠格式,不用双引号包含,因为使用双引号包含需要对正则式子里面的特殊字符再进行转义,很麻烦。
                最简单的写法就是不用双引号,用 // 包含即可,如:
                    /^[a-Z]\d{6}/  这个意思是:以字母开头后跟6位数字,如果使用双引号包含就得这么写:
                    "^[a-Z]\\d{6}"     ------特别注意:\d  转义成 \\d
                
                PS2: //使用双引号就不要使用反斜杠,使用反斜杠就不要使用双引号,例如上面的
                  

 var reg=new RegExp(/^[a-z]\d{4}$/);//开头是字母,后跟4个数字,我们可以使用另外一种书写方式:

                  

 var reg=new RegExp("^[a-z]\\d{4}$");//注意对反斜杠进行转义

               
                以下这么写是不对的:
                    var reg=new RegExp("/^[a-z]\\d{4}$/");  或者:
                    var reg=new RegExp("/^[a-z]\d{4}$/");  
                    
                综合上述:""  与  / 不共存。
                
        另外,使用字符串方法match()时,如果不匹配返回null,这时我们利用条件判断语句进行判断即可。
    
    
    二、test()方法
        与字符串match()方法不同的是,test()方法返回值是布尔类型,而match()返回的是匹配出来的值(不匹配返回null)。
            例如:test()

                var reg=new RegExp(/^\d{4}$/);
                var result=reg.test(txtnum);


            例如:match()
            

                var reg=new RegExp("^[a-z]\\d{1}$");
                var result=txtnum.match(reg);//如果你输入的符合规则,那么result的值就是你输入的值,否则就是null
                if(result!=null)
                    return true;
                else
                    return false;


        不管以上整理质量如何,我总觉得学习就是一个总结的过程,我们要做到:学习学习。去学习如何学习。