簡體   English   中英

在asp.net頁面上使用正則表達式使用javascript進行驗證不起作用

[英]Validation with javascript using regular expressions on asp.net page doesn't work

我正在嘗試使用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上,但這只是要求在字符串的開頭和結尾都有一個數字,不是嗎?

我想你必須改變

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

(將+從字符類中移出):

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

可以重寫為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM