使用asp.net页面上的正则表达式使用javascript进行验证不起作用

时间:2014-01-10 02:43:53

标签: c# javascript asp.net regex

我正在尝试使用javascript对asp页面的文本框进行验证,但我的第二个javascript函数无法正常工作。我在每个文本框的onblur事件上运行验证,所以我这样做:

<asp:TextBox ID="txtRegApellidoPat" runat="server" onblur="validaFormato(this);">  </asp:TextBox></td><td><asp:Label ID="valtxtRegApellidoPat" class="validaCad"   runat="server">Únicamente texto</asp:Label>

然后在需要整合器的文本框中执行:

<asp:TextBox ID="txtRegEdad" runat="server" onblur="validaFormatoNum(this);"></asp:TextBox></td><td><asp:Label ID="Label1" class="validaNum" runat="server">* Solo números</asp:Label>

然而,最后一个函数(validaNum)不起作用,并且似乎总是在我调用的regularexpression.test方法上返回false。

我的javascript代码是这样的:

<script type="text/javascript">
        var formato = document.getElementById('formReg');
        var textos = new Array("txtRegNombre", "txtRegApellidoPat",     "txtRegApellidoMat", "txtRegEdo");
        var numeros = new Array("txtRegEdad", "txtRegTel", "txtRegCP");
        var pattern = /([A-Z]|[ÁÉÍÓÚáéíóúÄËÏÖÜäëïöü])+[^\d+]/g;
        var pattern2 = /^\d$/g;
        var invalidos1=document.getElementsByClassName("validaCad");
        var invalidos2=document.getElementsByClassName("validaNum");
        function validaFormato(obj) {
            var valido = false;

            if (!pattern.test(obj.value)&&!obj.value=="") {

                            invalidos1[0].style.display = "inline";
                            invalidos1[1].style.display = "inline";
                            invalidos1[2].style.display = "inline";
                            invalidos1[3].style.display = "inline";
                            return valido;
                        }
                        else {
                            invalidos1[0].style.display = "none";
                            invalidos1[1].style.display = "none";
                            invalidos1[2].style.display = "none";
                            invalidos1[3].style.display = "none";
                            valido = true;
                        }
                   return valido;
        }
           function validaFormatoNum(obj) {
                var valido = false;

                if (!pattern2.test(obj.value) && !obj.value == "") {

                invalidos2[0].style.display = "inline";
                invalidos2[1].style.display = "inline";
                invalidos2[2].style.display = "inline";
                return valido;
            }
            else {
                invalidos2[0].style.display = "none";
                invalidos2[1].style.display = "none";
                invalidos2[2].style.display = "none";
                valido = true;
            }

            return valido;
        }
    </script>

我真的很感激这一点,因为我无法意识到问题是什么。问题是数字字段表现不规律,当我第一次在它们上面写一个数字时,关联的标签没有显示,这是正确的行为,但是当我再次通过表单和制表符跳出数字字段时,标签显示,好像值不是数字,然后在下面的选项卡上,标签没有显示,然后显示,然后它没有,等等。

当涉及正则表达式时,我真的很茫然,所以我不知道问题出在我的第二个RegExp上,但它只是要求在字符串的开头和结尾有一个数字,isn'是吗?

1 个答案:

答案 0 :(得分:0)

我想你必须改变

var pattern = /([A-Z]|[ÁÉÍÓÚáéíóúÄËÏÖÜäëïöü])+[^\d+]/g;

to(将+移出角色类):

var pattern = /([A-Z]|[ÁÉÍÓÚáéíóúÄËÏÖÜäëïöü])+[^\d]+/g;

可以改写:

var pattern = /[A-ZÁÉÍÓÚáéíóúÄËÏÖÜäëïöü]+\D+/g;