1

假设我有以下文本输入:

<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....

4

3 回答 3

3

jsFiddle 演示

你少了一个括号。

if (inputVal.match(pattern)) // <-- this one

正如@Christoph 所提到的,您正在尝试匹配 a 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-16T15:50:32.270 回答
2

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-16T15:59:44.477 回答
0

目前您的模式是字符串,您需要使用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/

于 2012-11-16T16:01:45.853 回答