jQuery проверяет: Как добавить правило для проверки регулярного выражения?

234
задан Sparky 7 July 2017 в 04:59
поделиться

6 ответов

Благодаря ответу 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}$" })

Кроме того, похоже, что существует файл, названный дополнительным-methods.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

319
ответ дан cwallenpoole 23 November 2019 в 03:29
поделиться

Можно использовать 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-plugin /

78
ответ дан Taryn 23 November 2019 в 03:29
поделиться

Немного расширяя ответ PeterTheNiceGuy:

$.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/
});

Но реализовать их было бы слишком сложно.

22
ответ дан 23 November 2019 в 03:29
поделиться

Как упоминалось в документации addMethod :

Обратите внимание: хотя соблазн добавить метод регулярного выражения, который проверяет его параметр по значению, велик, это намного Очиститель, чтобы инкапсулировать эти регулярные выражения внутри их собственного метода. Если вам нужно много немного разных выражений, попробуйте извлечь общий параметр. Библиотека регулярных выражений: http://regexlib.com/DisplayPatterns.aspx

Итак, да, вам нужно добавить метод для каждого регулярного выражения. Накладные расходы минимальны, в то время как они позволяют вам дать регулярному выражению имя (не следует недооценивать), сообщение по умолчанию (удобно) и возможность повторно использовать его в различных местах, не дублируя само регулярное выражение снова и снова.

19
ответ дан 23 November 2019 в 03:29
поделиться

У меня возникли проблемы со сборкой всех частей для выполнения валидатора регулярных выражений 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>
42
ответ дан 23 November 2019 в 03:29
поделиться

Нет причин определять регулярное выражение в виде строки.

$.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 },

TIS лучше этого, нет?

24
ответ дан 23 November 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: