javascript中的正则表达式,只匹配A-z和_?

时间:2013-06-26 20:40:38

标签: javascript regex

您好,这是我之前第一次使用正则表达式,并且我试图获取用户输入的变量,并查看它是否仅限于AZ,az,0-9和_

这是我到目前为止的代码:

function validateCSV(x){
    var y = document.getElementById('column').value;
    var pattern = new RegExp('^\b\w\b$');
    if(!pattern.test(y)){
       alert("Use only A-Z, a-z, 0-9, or _ in column names.");
       return false;
    }
}

据我所知,使用\ w会匹配任何字母数字和下划线但没有空格,这正是我想要的。然而,即使我只有像test1或测试一样的东西,它仍然似乎无法正常工作,因为它仍然会弹出警报并且不让我继续。有关此事的任何信息将不胜感激。

3 个答案:

答案 0 :(得分:6)

您缺少量词,您应该使用正则表达式文字:

/^\w+$/

答案 1 :(得分:3)

您当前的正则表达式正在寻找单个字符(根据定义,\b在匹配的开始和结束时使用时将断言为true。

我认为您正在寻找的正则表达式是/^[a-z0-9_]+$/i

请注意,您可以为+使用不同的内容:

  • +一个或多个字符
  • *零个或多个字符,与+基本相同,但也允许空字符串
  • {5}正好五个字符
  • {3,16}三到十六个字符(含)

根据需要变化!

答案 2 :(得分:1)

问题是您是从字符串文字定义正则表达式,这意味着需要转义反斜杠。你需要:

new RegExp('^\\b\\w\\b$');

或者只使用正则表达式文字:

var pattern = /^\b\w\b$/;

这导致您的下一个问题:正则表达式将匹配单个\w字符。您需要使用*来匹配零或更多,或+来匹配一个或多个。

根本不需要\b部分:

var pattern = /^\w*$/;

演示:http://jsfiddle.net/VFyug/

一般来说,使用new RegExp()和字符串定义正则表达式比正则表达式文字更笨拙,如果正则表达式实际上来自字符串变量,我只会使用它,因为,例如,它需要包含输入的文本由用户。