Плагин проверки не проверяет регулярное выражение в методе добавления

Я пробовал базовую проверку регулярных выражений с помощью плагина проверки jquery, но дело в том, что он работает только для "обязательных" правил, но не для метода добавления regexvalid. Как этого добиться

Заранее спасибо,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
     <script type="text/javascript" src="js/jquery-1.9.0.mini.js" > </script>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/jquery.validate.js" ></script>
    <script type="text/javascript">
        $(document).ready(function () {
    jQuery.validator.addMethod("regexvalid",function(element,value){
            return this.optional(element)|| /[0-9]*/.test(value);

    });
            $('#logform').validate({
                rules: {
                    txtUsr: {
                        required: true,
                        regexvalid:true

                    },
                    txtPass: {
                        required: true

                    }

                },
                messages: {
                    txtUsr: {
                        required: 'Please enter username',
                        regexvalid:'valid numbers'
                    },
                    txtPass: {
                        required: 'Please enter password'
                    }
                }

            });


        });


    </script>
    <style type="text/css">

.error

{

border-color:Red;

border-style:solid;

border-width:1px;

}

#signupForm label.error {
    margin-left: 10px;
    width: auto;
    display: inline;
}


</style>
</head>
<body>
<div id='LoginDiv' style='width:400px;height:300px;background-color:green;'>
    <form id='logform'>
        User Name : <input type="text" id='txtUsr' name='txtUsr' style='margin-top:12px'/>
        <br/>
        <br/>
        Password : <input type="text" id='txtPass' name='txtPass' /> 
        <br/>
        <br/>
        <input type="submit" id='btnSubmit' value='Submit' />
    </form>
    </div>
</body>
</html>

1 ответ

Здесь есть два вопроса.

1) Переменные, которые вы передаете в свой пользовательский метод, являются обратными:

jQuery.validator.addMethod("regexvalid",function(element,value){

Согласно документации, value приходит первым...

jQuery.validator.addMethod("regexvalid",function(value, element){

2) Я не эксперт по регулярным выражениям, и вы не объяснили, что он должен делать, но, похоже, он не действителен. Если вы хотите проверить, является ли значение числом, используйте значение по умолчанию number правило В противном случае regexvalid Сам метод работает, и вам просто нужно правильно настроить регулярное выражение.

Это использует функцию регулярного выражения по умолчанию number метод как демонстрация.

jQuery.validator.addMethod("regexvalid", function (value, element) {
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
});

ДЕМО: http://jsfiddle.net/ZFd4B/


РЕДАКТИРОВАТЬ, относительно вашего Regex:

Причина вашего регулярного выражения, /[0-9]*/.test(value) кажется, ничего не делает, потому что он на самом деле ничего не делает.

  • [0-9] соответствует любому числу.

  • * говорит ему, чтобы соответствовать " ноль или более " предыдущего выражения.

Так что спасибо *, тест всегда вернется true невзирая на [0-9],

Вы никогда не объясняли, что должен делать этот пользовательский метод, но regex Вы предоставили, действительно, спорный, так как он, кажется, всегда удовлетворен для каждого условия.

Источник: http://webcheatsheet.com/php/regular_expressions.php

Другие вопросы по тегам