首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery匹配正则表达式

jQuery匹配正则表达式
EN

Stack Overflow用户
提问于 2012-11-16 23:47:31
回答 3查看 276关注 0票数 1

假设我有以下文本输入:

代码语言:javascript
复制
<input class="required-field" type="text" name="create-user-username" pattern="/^[0-9]+$/" />

在我的JS中的某个地方,我(想)在我的表单验证中使用以下代码片段:

代码语言:javascript
复制
$('.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....

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-16 23:59:44

pattern是一个字符串,因此需要为:

代码语言:javascript
复制
$(this).attr('pattern').replace(/\//g,"");

if (!inputVal.match(new RegExp(pattern))) { // also you missed a ! for negation

此外,还可以使用

代码语言:javascript
复制
if (!pattern) // uses falsyness of "undefined" - also catches the empty string

// or

if ( typeof pattern !== "undefined")

并修复不匹配的括号:如果(inputVal.match(pattern) // <- missing )

票数 2
EN

Stack Overflow用户

发布于 2012-11-16 23:50:32

jsFiddle DEMO

你漏掉了一个括号。

代码语言:javascript
复制
if (inputVal.match(pattern)) // <-- this one

正如@Christoph提到的,您正在尝试匹配string,并且可以使用.replace()方法删除外部/ /,或者将输入元素本身中的模式更改为:

input pattern="^[0-9]+$"

并将您的模式变量更改为:

代码语言:javascript
复制
var pattern = new RegExp($(this).attr('pattern')); // now it'll all work

顺便说一句,一定要检查控制台日志(您会看到典型的Uncaught SyntaxError: Unexpected token {

另外,在检查未定义时,最好的方法是:

typeof(pattern) !== 'undefined'

票数 3
EN

Stack Overflow用户

发布于 2012-11-17 00:01:46

目前,您的模式是字符串,您需要使用new RegExp()转换为真正的真实模式。

还要从pattern="/^[0-9]+$/"中删除斜杠/,这将不是必需的,因为new RegExp()会自动添加斜杠。

请参阅代码,

代码语言:javascript
复制
<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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13419889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档