我已经尝试使用jquery验证插件进行基本的正则表达式验证,但问题是它只适用于规则'required'但不适用于add方法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>
答案 0 :(得分:0)
这里有两个问题。
1)您传递到自定义方法的变量是向后:
jQuery.validator.addMethod("regexvalid",function(element,value){
As per documentation,value
首先出现......
jQuery.validator.addMethod("regexvalid",function(value, element){
2)我不是正则表达式的专家,并且您没有解释它应该做什么,但它似乎没有效果。如果您想测试值是否为数字,请使用the default number
rule。否则,regexvalid
方法本身正在运行,您只需要正确调整正则表达式。
这是使用默认number
方法中的正则表达式函数作为演示。
jQuery.validator.addMethod("regexvalid", function (value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
});
DEMO:http://jsfiddle.net/ZFd4B/
编辑,关于你的正则表达式:
你的正则表达式/[0-9]*/.test(value)
似乎什么都不做是因为它实际上什么也没做。
[0-9]
匹配任何数字。
*
告诉它匹配上一个表达式的“零或更多”。
感谢*
,无论true
如何,测试都将始终返回[0-9]
。
你从未解释过这种自定义方法应该做什么,但你提供的regex
实际上没有实际意义,因为它似乎总是满足每一个条件。
来源:http://webcheatsheet.com/php/regular_expressions.php#basics