jQuery匹配正则表达式

时间:2012-11-16 15:47:31

标签: jquery validation

假设我有以下文字输入:

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

3 个答案:

答案 0 :(得分:3)

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 {

同样在检查undefined时,最好的方法是:

typeof(pattern) !== 'undefined'

答案 1 :(得分: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")

并修复不匹配的问题:if (inputVal.match(pattern) // <- missing )

答案 2 :(得分: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'); } } });​ 会自动添加斜杠。

参见代码

{{1}}

演示: http://jsfiddle.net/43eLD/1/