簡體   English   中英

indexOf用於自定義jquery驗證規則

[英]indexOf for custom jquery validation rule

前幾天,我在這里得到了很大的幫助,希望我能得到我所需要的答案,因為我現在還很困。 我有一個具有文本輸入(#USA_sub)和兩個后續文本輸入的(#FirstName)和(#LastName)的表單,我有一個驗證規則,用於檢查(#FirstName)和(#LastName)的每個值出現在(#USA_sub)中。 除此以外,我正在使用的工具是:在(#FirstName)輸入中輸入正確的值時,由於(#USA_sub)中包含了正確的值,因此您只需輸入2個字母的姓氏即可進行驗證。 如果跳過“名字”,則它需要所有姓氏。

$.validator.addMethod(
    "firstSig", 
    function(value, element, params) {
        return $(params).val().indexOf(value + ' ' + $("#LastName").val()) > -1;
    }, 
    "Your first name must be contained in your Electronic Signature."
);

$.validator.addMethod(
    "lastSig", 
    function(value, element, params) {
        return $(params).val().indexOf($("#FirstName").val() + ' ' + value) > -1;
}, 
    "Your last name must be contained in your Electronic Signature."
);

和驗證規則:

                                  FirstName: {
                    required: true,
                    minlength: 2,
                    firstSig: "#USA_sub"
                },
                LastName: {
                    required: true,
                    minlength: 2,
                    lastSig: "#USA_sub"
                }

這樣做的原因是您要對全名測試部分名稱。 只要目標字符串包含與測試字符串匹配的連續字符,就會存在匹配項。

例如:

FirstName = Bob
LastName = Dylan

USA_sub = Bob Dylan

user has typed: Bob Dyl

之所以存在匹配是因為indexOf()Bob Dylan找到了Bob Dyl

嘗試僅執行==搜索,如下所示:

return $(params).val() == ($("#FirstName").val() + ' ' + value);

您的FirstName驗證程序起作用的原因是,您在最后的空格中進行了串聯。

因此,在Bob(space)Dylan找不到Bo(space) 但是, Bob(space)中發現Bob(space)Dylan


編輯:新版本使用正則表達式測試輸入的開始/結束,並消除了從FirstName到LastName的交叉引用,反之亦然。

以前的版本不起作用,因為您總是要根據FirstName字段驗證FirstNameLastName

正因為如此,當你在標簽的LastName場,這大概是空的,在驗證失敗FirstName ,並且它不會重新驗證,直到你回去的FirstName

我在下面所做的是刪除跨字段引用,並使用正則表達式,以便我們能夠測試行的開始/結束。 因此,基本上我們擁有的是:

FirstName測試-BeginningOfInput + FirstName +空格LastName測試-Space + LastName + EndOfInput

$.validator.addMethod(
    "firstSig", 
    function(value, element, params) {
          // The regular expression represents
          //    beginning of input + value + space
        var regex = new RegExp('^' + value + ' ');
        return regex.test($(params).val());
    }, 
    "Your first name must be contained in your Electronic Signature."
);

$.validator.addMethod(
    "lastSig", 
    function(value, element, params) {
          // The regular expression represents
          //    space + value + end of input
        var regex = new RegExp(' ' + value + '$');
        return regex.test($(params).val());
}, 
    "Your last name must be contained in your Electronic Signature."
);

這樣,當您輸入正確的FirstName ,不會出現驗證失敗的情況,但尚未進入LastName字段。

暫無
暫無

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

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