Подавляет ли одно правило проверки другое правило проверки в плагине проверки jquery? - PullRequest
0 голосов
/ 12 августа 2011

У меня следующий код

<html>
<head>
<title>Untitled Document</title>
<script type="text/javascript" src="js/jquery-1-4-2.js"></script>
<script type="text/javascript" src="js/jquery_validate.js"></script>
<script type="text/javascript">

$(document).ready(function(){

$("#form1").validate({
    rules: {
            fld1: {
                methodtwo: true,
                methodone: true
            }
           },
    messages: {
        fld1: {
            methodtwo: "<br> 2Wrong Project Name.",
            methodone: "<br> 1Wrong Project Name."

              }
        }

      });
});   

$.validator.addMethod('methodone', function (value) { 
    return /^[a-zA-Z0-9]+$/.test(value); 
}, 'wrong1.');

$.validator.addMethod('methodtwo', function (value) { 
    return /^[a-zA-Z^0-9]+$/.test(value); 
}, 'wrong2.');



</script> 


</head>
<body>
<form  id="form1"name="form1" action="" method="get">
<table width="80%"  border="0">
  <tr>
  <td><input type="text" name="fld1" id="idfld1"></td>
</tr>
 <tr>
 <td><input type="submit" name="submit" id="idsubmit"></td>
</tr>
</table>
</form>
</body>
</html>

После выполнения кода выше я ожидал, что если мы введем

  1. алфавиты a-zA-z, тогда он примет ввод и принял
  2. любой специальный символ показывает ошибку и показывает ошибку
  3. но когда мы введем число 0-9, я ожидал, что он покажет сообщение об ошибке methodtwo. но его приняли.

Пожалуйста, объясните мне, почему это произошло? Поскольку я проверяю, что произойдет, если к одному полю применяются два противоположных правила проверки.

Пожалуйста, объясните мне, друзья, есть ли что-то не так с этим кодом или одно правило проверки подавляет другое?

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Как правильно указывает Тим, символ ^ является метасимволом, только когда он является первым символом в классе символов.

Одна вещь, которая может помочь при написании регулярного выражения, это написать на английском языке (или на вашем родном языке по выбору) именно то, что соответствует регулярному выражению. Давайте сделаем это с вашими двумя регулярными выражениями:

Первое регулярное выражение: /^[a-zA-Z0-9]+$/ означает: «В начале строки соответствует один или несколько символов, которые могут быть буквенными или числовыми, а затем - конец строки».

Второе регулярное выражение: /^[a-zA-Z^0-9]+$/ означает: "В начале строки соответствует одному или нескольким символам, которые могут быть алфавитом, символом ^ или цифрой, а затем совпадением конец строки. "

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

Новое регулярное выражение: /^[a-zA-Z]+$/ означает: "В начале строки соответствует один или несколько букв алфавита, а затем конец строки."

1 голос
/ 12 августа 2011

^ означает «не» только тогда, когда это первый символ в классе символов.В любой другой позиции это означает литерал ^.

Так что вы, вероятно, захотите

/^\D+$/

для метода 2. (\D означает «любой символ, кроме цифры», иэто уже включает a-zA-Z.)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...