日期:2014-05-16  浏览次数:20399 次

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上看例子时它部分例子是如下这么写的:       

                &