假设我有以下文本输入:
<input class="required-field" type="text" name="create-user-username" pattern="/^[0-9]+$/" />在我的JS中的某个地方,我(想)在我的表单验证中使用以下代码片段:
$('.required-field').each(function() {
var inputVal = $(this).val();
var pattern = $(this).attr('pattern');
if (pattern !== 'undefined') {
if (inputVal.match(pattern)) {
alert('Input is not valid');
}
}
});然而,匹配不起作用,我未能找到有效的解决方案……
用户按步骤完成表单,并在进入下一步之前对每个页面进行验证。这就是为什么我不使用jQuery .validate....
发布于 2012-11-16 23:59:44
pattern是一个字符串,因此需要为:
$(this).attr('pattern').replace(/\//g,"");
if (!inputVal.match(new RegExp(pattern))) { // also you missed a ! for negation此外,还可以使用
if (!pattern) // uses falsyness of "undefined" - also catches the empty string
// or
if ( typeof pattern !== "undefined")并修复不匹配的括号:如果(inputVal.match(pattern) // <- missing )
发布于 2012-11-16 23:50:32
jsFiddle DEMO
你漏掉了一个括号。
if (inputVal.match(pattern)) // <-- this one正如@Christoph提到的,您正在尝试匹配string,并且可以使用.replace()方法删除外部/ /,或者将输入元素本身中的模式更改为:
input pattern="^[0-9]+$"
并将您的模式变量更改为:
var pattern = new RegExp($(this).attr('pattern')); // now it'll all work顺便说一句,一定要检查控制台日志(您会看到典型的Uncaught SyntaxError: Unexpected token {
另外,在检查未定义时,最好的方法是:
typeof(pattern) !== 'undefined'
发布于 2012-11-17 00:01:46
目前,您的模式是字符串,您需要使用new RegExp()转换为真正的真实模式。
还要从pattern="/^[0-9]+$/"中删除斜杠/,这将不是必需的,因为new RegExp()会自动添加斜杠。
请参阅代码,
<input class="required-field" type="text" name="create-user-username" pattern="^[0-9]+$" value=""/>
$('.required-field').each(function() {
var inputVal = $(this).val();
var pattern = $(this).attr('pattern');
if (pattern != 'undefined') {
pattern = new RegExp(pattern)
if (inputVal.match(pattern)){
alert('Input is not valid');
}
}
});演示: http://jsfiddle.net/43eLD/1/
https://stackoverflow.com/questions/13419889
复制相似问题