Плагин проверки не проверяет регулярное выражение в методе добавления
Я пробовал базовую проверку регулярных выражений с помощью плагина проверки 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