【问题标题】:Validation with javascript using regular expressions on asp.net page doesn't work在 asp.net 页面上使用正则表达式使用 javascript 进行验证不起作用
【发布时间】:2014-01-10 02:43:52
【问题描述】:

我正在尝试使用 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) 不起作用,并且似乎总是在我调用的正则表达式测试方法上返回 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 是否有问题,但它只是要求在字符串的开头和结尾有一个数字,不是是吗?

【问题讨论】:

    标签: c# javascript asp.net regex


    【解决方案1】:

    我猜你必须改变

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

    到(将+移出字符类):

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

    可以重写:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 2020-02-18
      相关资源
      最近更新 更多