jQuery বৈধতা: নিয়মিত অভিব্যক্তি বৈধতা জন্য একটি বিধি যুক্ত কিভাবে?


240

আমি jQuery বৈধতা প্লাগইন ব্যবহার করছি । দুর্দান্ত জিনিস! আমি আমার বিদ্যমান এএসপি.এনইটি সমাধানটি এএসপি.এনইটি ভ্যালিডিটারের পরিবর্তে জিকিউরি ব্যবহার করতে মাইগ্রেট করতে চাই। আমি নিয়মিত অভিব্যক্তি বৈধকারীর জন্য একটি প্রতিস্থাপন মিস করছি । আমি এরকম কিছু করতে সক্ষম হতে চাই:

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

এটি অর্জনের জন্য আমি কীভাবে একটি কাস্টম বিধি যুক্ত করব ?


1
দয়া করে বলুন যে আপনি ইনপুট সার্ভারের দিকটি যাচ্ছেন এবং কেবল ক্লায়েন্ট সাইডের বৈধতার উপর নির্ভর করছেন না কারণ এটি অবশ্যই বন্ধ করা যেতে পারে।
এস ফিলিপ

অবশ্যই! :-) সার্ভারে বৈধতা থাকা আবশ্যক
পিটারফ্র্যামক্লোন

121
OMG এর এটা না Regex বৈধতা আছে ?!
আন্দ্রে রেনিয়া

4
আমি বলতে চাইছি, যাহাই হউক না কেন বৈধতার জন্য রেজেক্স চাই ... ...;)
জ্যামিবারো

উত্তর:


329

রেডস্কয়ারের উত্তরের জন্য ধন্যবাদ আমি এই জাতীয় একটি পদ্ধতি যুক্ত করেছি:

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

যে কোনও রেইজেক্সের বিরুদ্ধে বৈধতা দেওয়ার জন্য এখন আপনাকে যা করতে হবে তা হ'ল:

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

অতিরিক্তভাবে, দেখে মনে হচ্ছে অতিরিক্ত-পদ্ধতি.জেএস নামে একটি ফাইল রয়েছে যার মধ্যে "প্যাটার্ন" পদ্ধতি রয়েছে যা উদ্ধৃতি ব্যতীত পদ্ধতিটি ব্যবহার করে তৈরি করা হলে 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
আমি রেজিএক্সপকে স্ট্রিংয়ের অনুরোধের পরিবর্তে আক্ষরিক হিসাবে পদ্ধতির বাইরে সংজ্ঞায়িত করতে দিতাম ..
ট্র্যাকার 1

3
এটি অত্যন্ত দরকারী এবং jquery এ অন্তর্ভুক্ত করা উচিত :(
গ্রাহাম এ

3
বা এটি এর মতো বৈধকরণকারীর সাথে যুক্ত করুন: ... বিধি: {পাঠ্যবক্স_ইনপুট_নাম_এটিআর: {প্রয়োজনীয়: সত্য, রেজেক্স: "a [a-zA-Z '। \\ গুলি] {1,50} $"}}, ... ।
হান্স কেরখফ

2
আপনি এর মতো একটি কাস্টম বার্তা প্রবেশ করুন: $ ('# উপাদান')। নিয়মাবলী ('অ্যাড', {রেজেক্স: / [অ্যাবসি] /, বার্তা {রেজেক্স: "কাস্টম বার্তা '}});
নাসপিনস্কি

80

আপনি অ্যাডমেথড () ব্যবহার করতে পারেন

যেমন

$.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-uthoration-plugin/


6
সত্যই প্রশ্নের উত্তর দিবেন না। আপনি যদি একটি সাধারণ রেজেক্স নিয়ম চান? এই উত্তরের সাথে আপনাকে প্রতিটি বিভক্ত রেজেক্সের জন্য ম্যাথডোড যুক্ত করতে হবে।
AndreasN

43

JQuery নিয়মিত এক্সপ্রেশন বৈধকরণকারক করার জন্য সমস্ত টুকরো একসাথে রাখতে আমার কিছুটা সমস্যা হয়েছিল, তবে আমি এটি কাজ করেছিলাম ... এখানে একটি সম্পূর্ণ কার্যকারণ উদাহরণ। এটি 'বৈধকরণ' প্লাগইন ব্যবহার করে যা jQuery বৈধকরণ প্লাগিনে পাওয়া যায়

<!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 },

এইভাবে আরও ভাল, না?


এর জন্য কোন জেএস দরকার?
ভাভিক আম্বানি

আসলে, সবেমাত্র এটির সাথে একটি সমস্যা খুঁজে পেয়েছি। আপনি যদি জি পতাকা ব্যবহার করেন তবে আপনি বেমানান ফলাফল পাবেন। জি পতাকাটি আপাতদৃষ্টিতে এটির নিজস্ব সূচি তৈরি করে (দেখুন: stackoverflow.com/questions/209732/… )। সুতরাং আপনাকে ফাংশনে রেজেক্সটিকে নতুনভাবে সংজ্ঞায়িত করতে হবে যাতে প্রতিবার যখন এটি ডাকা হয় তখন এটি পুনরায় তৈরি করা হয়।
রোব_জেমস

1
যে জুড়তে: এখনও উপরে, একটি Regex যেমন সংজ্ঞায়িত (অথবা আপনি পতাকা স্ট্রিং> Regex রূপান্তর সমস্যা আছে) কিন্তু ছাড়াও এটি এখনও প্রয়োজন var re = new RegExp(regexp);ফাংশনে
rob_james

24

পিটারTheNiceGuy এর উত্তরটি কিছুটা বাড়িয়ে দেওয়া:

$.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-flag সেট করা হয় RegExpঅবজেক্ট। অন্যথায় এটি সাবজেক্টের স্ট্রিং আলাদা হলেও, এটি সেই রেজেক্সের সাথে শেষ ম্যাচের অবস্থান থেকে বৈধকরণ শুরু করবে।

আমার কাছে থাকা আরও কিছু ধারণা হ'ল আপনাকে রেইগেক্সের অ্যারেগুলি ব্যবহার করতে সক্ষম করা এবং রেইজেক্সের উপকারের জন্য আরেকটি নিয়ম:

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

তবে এগুলি বাস্তবায়ন করা খুব বেশি হবে।


আমি জেকিউগ্রিডের অ্যাড আকারে নিয়মিত প্রকাশের বৈধতা চাই। আমি এটা কিভাবে করবো ?
ভাভিক আম্বানি

@ ভাভিকআম্বানি আপনি বৈধতার জন্য একটি কাস্টম ফাংশন ব্যবহার করতে পারেন। উদাহরণস্বরূপ উইকি দেখুন ।
মার্কাস জারদারোট

19

অ্যাডমেথড ডকুমেন্টেশনে উল্লিখিত হিসাবে :

অনুগ্রহ করে নোট করুন: যদিও এই পরীক্ষার প্রবণতাটি মূল্যটির তুলনায় এটির পরামিতিটি পরীক্ষা করে এমন একটি রেইগেক্স পদ্ধতি যুক্ত করতে দুর্দান্ত, তবে তাদের নিজস্ব পদ্ধতির অভ্যন্তরে নিয়মিত প্রকাশগুলি সজ্জিত করা অনেক পরিষ্কার। আপনার যদি প্রচুর পরিমাণে আলাদা আলাদা এক্সপ্রেশন প্রয়োজন হয় তবে একটি সাধারণ প্যারামিটার বের করার চেষ্টা করুন। নিয়মিত প্রকাশের একটি লাইব্রেরি: http://regexlib.com/DisplayPatterns.aspx

হ্যাঁ, আপনাকে প্রতিটি নিয়মিত প্রকাশের জন্য একটি পদ্ধতি যুক্ত করতে হবে। ওভারহেডটি ন্যূনতম, যদিও এটি আপনাকে রেইজেক্সকে একটি নাম (অবমূল্যায়ন করা হবে না), একটি ডিফল্ট বার্তা (হ্যান্ডি) এবং বিভিন্ন স্থানটিকে পুনরায় ডুপ্লিকেট না করে এটিকে বিভিন্ন জায়গায় পুনরায় ব্যবহার করার ক্ষমতা দেয়।


আপনার উত্তর অনেক প্রশংসিত হয়! ধন্যবাদ। আমি আবার এটি সম্পর্কে চিন্তা করব। আমাদের ক্ষেত্রে রেগেক্স বৈধতা সবচেয়ে উপযুক্ত বলে মনে হয়েছিল। তবে আমি "নামযুক্ত" বৈধতা ব্যবহার করার ক্ষেত্রে আপনার
বক্তব্যটি

আমি জেকিউগ্রিডের অ্যাড আকারে নিয়মিত প্রকাশের বৈধতা চাই। আমি এটা কিভাবে করবো ?
ভাভিক আম্বানি

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'
            }
        }
    });
});

নিশ্চিত করুন যে রেজেক্সটি /:-) এর মধ্যে রয়েছে


আমি জেকিউগ্রিডের অ্যাড আকারে নিয়মিত প্রকাশের বৈধতা চাই। আমি এটা কিভাবে করবো ?
ভাভিক আম্বানি

12

আপনি ফাইলটিতে patternসংজ্ঞায়িত ব্যবহার করতে পারেন additional-methods.js। নোট করুন যে এই অতিরিক্ত-পদ্ধতি.js ফাইলটি অবশ্যই jQuery বৈধতা নির্ভরতার পরে অন্তর্ভুক্ত করা উচিত , তারপরে আপনি কেবল ব্যবহার করতে পারেন

$("#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 বৈধতা প্লাগইনের মার্কআপ সংকেত ব্যবহার করি এবং পোস্ট নমুনাগুলি আমাদের জন্য কাজ করে না, যখন পতাকাগুলি রেজেক্সে উপস্থিত থাকে, যেমন

<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-ificationsation/blob/master/src/additional/pattern.js


1

এটি বৈধতা নিয়মের অন্যতম হয়ে আমার পক্ষে কাজ করেছে:

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

আশা করি এটা সাহায্য করবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.