0

您好,这是我之前第一次使用正则表达式,我正在尝试获取用户输入的变量,看看它是否仅限于 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 或 test 之类的东西,它似乎仍然无法正常工作,因为它仍然会弹出我的警报并且不允许我继续。任何有关此事的信息将不胜感激。

4

3 回答 3

6

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

/^\w+$/
于 2013-06-26T20:42:11.557 回答
3

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

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

请注意,您可以为此使用不同的东西+

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

根据需要变化!

于 2013-06-26T20:43:25.570 回答
1

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

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

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

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

这导致了您的下一个问题:正则表达式将匹配单个\w字符。您需要按照 with*匹配零个或多个,或者 a+匹配一个或多个。

并且\b根本不需要这些零件:

var pattern = /^\w*$/;

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

In general, defining a regex using new RegExp() and a string is clunkier than a regex literal and I would only use it if the regex actually is coming from a string variable because, e.g., it needs to include text entered by the user.

于 2013-06-26T20:50:39.837 回答