jQuery के सत्यापन: नियमित अभिव्यक्ति सत्यापन के लिए नियम कैसे जोड़ें?


240

मैं jQuery सत्यापन प्लगइन का उपयोग कर रहा हूं । उत्तम सामग्री! मैं ASP.NET सत्यापनकर्ताओं के बजाय jQuery का उपयोग करने के लिए अपने मौजूदा ASP.NET समाधान को स्थानांतरित करना चाहता हूं। मुझे नियमित अभिव्यक्ति सत्यापनकर्ता के लिए एक प्रतिस्थापन याद आ रहा है । मैं ऐसा कुछ करने में सक्षम होना चाहता हूं:

$("Textbox").rules("add", { regularExpression: "^[a-zA-Z'.\s]{1,40}$" })

मैं इसे प्राप्त करने के लिए एक कस्टम नियम कैसे जोड़ूं ?


1
कृपया कहें कि आप इनपुट सर्वर पक्ष की जाँच कर रहे हैं और ग्राहक पक्ष सत्यापन पर भरोसा नहीं कर रहे हैं क्योंकि यह स्पष्ट रूप से बंद किया जा सकता है।
एस फिलिप

बेशक! :-) सर्वर पर सत्यापन एक होना चाहिए
पीटरफ्रॉम कोलोन

121
OMG यह regex सत्यापन नहीं है ?!
आंद्रेई R Andrenea 16

4
मेरा मतलब है, जो किसी भी तरह सत्यापन के लिए regex चाहते हैं ... ...;)
jamiebarrow

जवाबों:


329

Redsquare के उत्तर के लिए धन्यवाद मैंने इस तरह एक विधि जोड़ी:

$.validator.addMethod(
        "regex",
        function(value, element, regexp) {
            var re = new RegExp(regexp);
            return this.optional(element) || re.test(value);
        },
        "Please check your input."
);

अब आप सभी किसी भी regex के खिलाफ मान्य करने की जरूरत है यह है:

$("#Textbox").rules("add", { regex: "^[a-zA-Z'.\\s]{1,40}$" })

इसके अतिरिक्त, ऐसा लगता है कि अतिरिक्त-Method.js नामक एक फ़ाइल है जिसमें विधि "पैटर्न" शामिल है, जो बिना उद्धरण के विधि का उपयोग करते हुए बनाया गया एक RegExp हो सकता है।


संपादित करें

patternसमारोह अब यह करने के लिए, उदाहरण के बनाने पसंदीदा तरीका है:

 $("#Textbox").rules("add", { pattern: "^[a-zA-Z'.\\s]{1,40}$" })

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/additional-methods.js


4
$ ("टेक्स्टबॉक्स") $ ("# टेक्स्टबॉक्स") होना चाहिए।
रयान श्रीपत

3
मैं RegExp को स्ट्रिंग से मंगलाचरण के बजाय एक शाब्दिक के रूप में विधि के बाहर परिभाषित करने देता था ..
Tracker1

3
यह सुपर उपयोगी है और इसे jquery में शामिल किया जाना चाहिए :(
ग्राहम ए

3
या इसे इस तरह सत्यापनकर्ता में जोड़ें: ... नियम: {textbox_input_name_attr: {अपेक्षित: सत्य, regex: "^ [a-zA-Z '। \\ s] {1,50} $"}}, ...। ।
हंस केर्खोफ

2
आप इस तरह एक कस्टम संदेश दर्ज करते हैं: $ ('# तत्व')। नियम ('जोड़ें', {regex: / [abc] /, संदेश {regex: "custom message '}});
naspinski

80

आप addMethod () का उपयोग कर सकते हैं

जैसे

$.validator.addMethod('postalCode', function (value) { 
    return /^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))$/.test(value); 
}, 'Please enter a valid US or Canadian postal code.');

यहाँ अच्छा लेख https://web.archive.org/web/20130609222116/http://www.randallmorey.com/blog/2008/mar/16/extending-jquery-form-validation-plinin/


6
वास्तव में इस सवाल का जवाब नहीं है। यदि आप सामान्य रेगेक्स नियम चाहते हैं तो क्या होगा? इस उत्तर के साथ आपको प्रत्येक विवर्तनिक रेगेक्स के लिए मेथोड जोड़ना होगा।
एंड्रियास

43

मुझे jQuery के नियमित अभिव्यक्ति सत्यापनकर्ता के लिए सभी टुकड़ों को एक साथ रखने में थोड़ी परेशानी हुई, लेकिन मुझे यह काम करने के लिए मिला ... यहाँ एक पूर्ण कार्य उदाहरण है। यह 'Validation' प्लगइन का उपयोग करता है जो jQuery Validation Plugin में पाया जा सकता है

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script src="http://YOURJQUERYPATH/js/jquery.js" type="text/javascript"></script>
    <script src="http://YOURJQUERYPATH/js/jquery.validate.js" type="text/javascript"></script>
    <script type="text/javascript">

        $().ready(function() {
            $.validator.addMethod("EMAIL", function(value, element) {
                return this.optional(element) || /^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/i.test(value);
            }, "Email Address is invalid: Please enter a valid email address.");

            $.validator.addMethod("PASSWORD",function(value,element){
                return this.optional(element) || /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,16}$/i.test(value);
            },"Passwords are 8-16 characters with uppercase letters, lowercase letters and at least one number.");

            $.validator.addMethod("SUBMIT",function(value,element){
                return this.optional(element) || /[^ ]/i.test(value);
            },"You did not click the submit button.");

            // Validate signup form on keyup and submit
            $("#LOGIN").validate({
                rules: {
                    EMAIL: "required EMAIL",
                    PASSWORD: "required PASSWORD",
                    SUBMIT: "required SUBMIT",
                },
            });
        });
    </script>
</head>
<body>
    <div id="LOGIN_FORM" class="form">
        <form id="LOGIN" name="LOGIN" method="post" action="/index/secure/authentication?action=login">
            <h1>Log In</h1>
            <div id="LOGIN_EMAIL">
                <label for="EMAIL">Email Address</label>
                <input id="EMAIL" name="EMAIL" type="text" value="" tabindex="1" />
            </div>
            <div id="LOGIN_PASSWORD">
                <label for="PASSWORD">Password</label>
                <input id="PASSWORD" name="PASSWORD" type="password" value="" tabindex="2" />
            </div>
            <div id="LOGIN_SUBMIT">
                <input id="SUBMIT" name="SUBMIT" type="submit" value="Submit" tabindex="3" />
            </div>
        </form>
    </div>
</body>
</html>

25

रेगेक्स को एक स्ट्रिंग के रूप में परिभाषित करने का कोई कारण नहीं।

$.validator.addMethod(
    "regex",
    function(value, element, regexp) {
        var check = false;
        return this.optional(element) || regexp.test(value);
    },
    "Please check your input."
);

तथा

telephone: { required: true, regex : /^[\d\s]+$/, minlength: 5 },

बेहतर इस तरह से, नहीं?


इसके लिए कौन सा js आवश्यक है?
भाविक अंबानी

दरअसल, बस इसके साथ एक मुद्दा मिला। यदि आप g ध्वज का उपयोग करते हैं तो आपको असंगत परिणाम मिलेंगे। जी ध्वज यह स्पष्ट रूप से स्वयं का सूचकांक बनाता है (देखें: stackoverflow.com/questions/209732/… )। इसलिए आपको फ़ंक्शन में regex को फिर से परिभाषित करने की आवश्यकता है ताकि इसे हर बार इसे फिर से बनाया जाए।
लूट_जाम

1
इसे जोड़ने के लिए: फिर भी इसे एक रेक्स के रूप में परिभाषित करें, जैसा कि ऊपर है (या आपके पास स्ट्रिंग के साथ मुद्दे होंगे> फ्लैग के साथ रेगेक्स रूपांतरण) लेकिन इसके अलावा यह अभी भी var re = new RegExp(regexp);फ़ंक्शन में आवश्यक है
rob_james

24

पीटरन्यूसिग्यू के उत्तर को थोड़ा बढ़ाएँ:

$.validator.addMethod(
        "regex",
        function(value, element, regexp) {
            if (regexp.constructor != RegExp)
                regexp = new RegExp(regexp);
            else if (regexp.global)
                regexp.lastIndex = 0;
            return this.optional(element) || regexp.test(value);
        },
        "Please check your input."
);

यह आपको नियम में रेगेक्स ऑब्जेक्ट को पारित करने की अनुमति देगा।

$("Textbox").rules("add", { regex: /^[a-zA-Z'.\s]{1,40}$/ });

-फ्लैग को ऑब्जेक्ट पर सेट करने पर lastIndexसंपत्ति को रीसेट करना आवश्यक gहै RegExp। अन्यथा यह उस रेगेक्स के साथ अंतिम मैच की स्थिति से मान्य करना शुरू कर देगा, भले ही विषय स्ट्रिंग अलग हो।

कुछ अन्य विचार जो मुझे करने थे, आप रेगेक्स के सरणियों का उपयोग करने में सक्षम थे, और रेगेक्स के निषेध के लिए एक और नियम:

$("password").rules("add", {
    regex: [
        /^[a-zA-Z'.\s]{8,40}$/,
        /^.*[a-z].*$/,
        /^.*[A-Z].*$/,
        /^.*[0-9].*$/
    ],
    '!regex': /password|123/
});

लेकिन उन पर अमल करना शायद बहुत ज्यादा होगा।


मैं JQgrid के रूप में नियमित अभिव्यक्ति सत्यापन चाहता हूं। मैं उसे कैसे कर सकता हूँ ?
भाविक अंबानी

@BavikAmbani आप सत्यापन के लिए एक कस्टम फ़ंक्शन का उपयोग कर सकते हैं। उदाहरण के लिए विकी देखें ।
मार्कस जार्डेरॉट

19

जैसा कि addMethod प्रलेखन पर उल्लेख किया गया है :

कृपया ध्यान दें: जबकि प्रलोभन एक रेगेक्स विधि जोड़ने के लिए बहुत अच्छा है जो मूल्य के खिलाफ पैरामीटर की जांच करता है, यह अपने तरीके के अंदर उन नियमित अभिव्यक्तियों को संलग्न करने के लिए बहुत क्लीनर है। यदि आपको कुछ अलग-अलग अभिव्यक्तियों की बहुत आवश्यकता है, तो एक सामान्य पैरामीटर निकालने का प्रयास करें। नियमित अभिव्यक्ति का एक पुस्तकालय: http://regexlib.com/DisplayPatterns.aspx

तो हां, आपको प्रत्येक नियमित अभिव्यक्ति के लिए एक विधि जोड़ना होगा। ओवरहेड न्यूनतम है, जबकि यह आपको रेगेक्स को एक नाम (कम नहीं आंका जाना), एक डिफ़ॉल्ट संदेश (आसान) और इसे विभिन्न स्थानों पर पुन: उपयोग करने की क्षमता देता है, बिना रेगेक्स को खुद से और अधिक नकल किए बिना।


आपका उत्तर बहुत स्पष्ट है! धन्यवाद। मैं इसके बारे में फिर से सोचूंगा। हमारे मामले में रेगेक्स की मान्यता सबसे उपयुक्त थी। हालांकि मैं "नाम" मान्यताओं का उपयोग करने में आपकी बात समझता हूं ...
पीटरफ्रॉम कोलोन

मैं JQgrid के रूप में नियमित अभिव्यक्ति सत्यापन चाहता हूं। मैं उसे कैसे कर सकता हूँ ?
भाविक अंबानी

14

मुझे यह इस तरह काम करने के लिए मिला:

$.validator.addMethod(
    "regex",
    function(value, element, regexp) {
        return this.optional(element) || regexp.test(value);
    },
    "Please check your input."
);


$(function () {
    $('#uiEmailAdress').focus();
    $('#NewsletterForm').validate({
        rules: {
            uiEmailAdress:{
                required: true,
                email: true,
                minlength: 5
            },
            uiConfirmEmailAdress:{
                required: true,
                email: true,
                equalTo: '#uiEmailAdress'
            },
            DDLanguage:{
                required: true
            },
            Testveld:{
                required: true,
                regex: /^[0-9]{3}$/
            }
        },
        messages: {
            uiEmailAdress:{
                required: 'Verplicht veld',
                email: 'Ongeldig emailadres',
                minlength: 'Minimum 5 charaters vereist'
            },
            uiConfirmEmailAdress:{
                required: 'Verplicht veld',
                email: 'Ongeldig emailadres',
                equalTo: 'Veld is niet gelijk aan E-mailadres'
            },
            DDLanguage:{
                required: 'Verplicht veld'
            },
            Testveld:{
                required: 'Verplicht veld',
                regex: '_REGEX'
            }
        }
    });
});

सुनिश्चित करें कि regex /:-) के बीच है


मैं JQgrid के रूप में नियमित अभिव्यक्ति सत्यापन चाहता हूं। मैं उसे कैसे कर सकता हूँ ?
भाविक अम्बानी

12

आप फ़ाइल patternमें परिभाषित उपयोग कर सकते हैं additional-methods.js। ध्यान दें कि इस अतिरिक्त मेथड्स। Js फ़ाइल को jQuery Validate निर्भरता के बाद शामिल किया जाना चाहिए , फिर आप बस उपयोग कर सकते हैं

$("#frm").validate({
    rules: {
        Textbox: {
            pattern: /^[a-zA-Z'.\s]{1,40}$/
        },
    },
    messages: {
        Textbox: {
            pattern: 'The Textbox string format is invalid'
        }
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/additional-methods.min.js"></script>
<form id="frm" method="get" action="">
    <fieldset>
        <p>
            <label for="fullname">Textbox</label>
            <input id="Textbox" name="Textbox" type="text">
        </p>
    </fieldset>
</form>


5

यह वर्किंग कोड है।

function validateSignup()
{   
    $.validator.addMethod(
            "regex",
            function(value, element, regexp) 
            {
                if (regexp.constructor != RegExp)
                    regexp = new RegExp(regexp);
                else if (regexp.global)
                    regexp.lastIndex = 0;
                return this.optional(element) || regexp.test(value);
            },
            "Please check your input."
    );

    $('#signupForm').validate(
    {

        onkeyup : false,
        errorClass: "req_mess",
        ignore: ":hidden",
        validClass: "signup_valid_class",
        errorClass: "signup_error_class",

        rules:
        {

            email:
            {
                required: true,
                email: true,
                regex: /^[A-Za-z0-9_]+\@[A-Za-z0-9_]+\.[A-Za-z0-9_]+/,
            },

            userId:
            {
                required: true,
                minlength: 6,
                maxlength: 15,
                regex: /^[A-Za-z0-9_]{6,15}$/,
            },

            phoneNum:
            {
                required: true,
                regex: /^[+-]{1}[0-9]{1,3}\-[0-9]{10}$/,
            },

        },
        messages: 
        {
            email: 
            {
                required: 'You must enter a email',
                regex: 'Please enter a valid email without spacial chars, ie, Example@gmail.com'
            },

            userId:
            {
                required: 'Alphanumeric, _, min:6, max:15',
                regex: "Please enter any alphaNumeric char of length between 6-15, ie, sbp_arun_2016"
            },

            phoneNum: 
            {
                required: "Please enter your phone number",
                regex: "e.g. +91-1234567890"    
            },

        },

        submitHandler: function (form)
        {
            return true;
        }
    });
}

3

हम मुख्य रूप से jquery सत्यापन प्लगइन के मार्कअप नोटेशन का उपयोग करते हैं और पोस्ट किए गए नमूने हमारे लिए काम नहीं करते हैं, जब फ्लैक्स regex में मौजूद होते हैं, उदा।

<input type="text" name="myfield" regex="/^[0-9]{3}$/i" />

इसलिए हम निम्नलिखित स्निपेट का उपयोग करते हैं

$.validator.addMethod(
        "regex",
        function(value, element, regstring) {
            // fast exit on empty optional
            if (this.optional(element)) {
                return true;
            }

            var regParts = regstring.match(/^\/(.*?)\/([gim]*)$/);
            if (regParts) {
                // the parsed pattern had delimiters and modifiers. handle them. 
                var regexp = new RegExp(regParts[1], regParts[2]);
            } else {
                // we got pattern string without delimiters
                var regexp = new RegExp(regstring);
            }

            return regexp.test(value);
        },
        "Please check your input."
);  

बेशक अब कोई भी इस कोड को जोड़ सकता है, उपरोक्त में से एक भी RegExp ऑब्जेक्ट को प्लगइन में पारित करने की अनुमति देता है, लेकिन चूंकि हमें इसकी आवश्यकता नहीं थी इसलिए हमने पाठक के लिए इस अभ्यास को छोड़ दिया; ;-)।

PS: इसके लिए बंडल बंडल प्लगइन भी है, https://github.com/jzaefferer/jquery-validation/blob/master/src/additional/pattern.js


1

इसने मेरे लिए काम किया, जो सत्यापन नियमों में से एक है:

    Zip: {
                required: true,
                regex: /^\d{5}(?:[-\s]\d{4})?$/
            }

आशा करता हूँ की ये काम करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.