Javascript / Regex:Expression在一个环境中工作,而不是在另一个环境中工作

时间:2014-05-13 20:16:10

标签: javascript regex

我试图只允许字母数字输入或这些字符:'()-_。 (使用"。"包括在内)

使用regexpal.com我输入了这个正则表达式:[^a-zA-Z0-9()\.'\-\_ ]

正确识别*和@作为匹配。令人费解的是,我在.aspx页面上的javascript中有相同的表达,并且它没有捕获*或@。我已经确认确实正在进入该函数并且表达式会进行评估。这是代码:

  $(".validateText").keyup(function (e) {
          var matchPattern = "[^a-zA-Z0-9()\.'\-\_ ]";
          var regEx = new RegExp(matchPattern);
          console.log("Regex: " + regEx + "\nValue of " + e.target.id + " is: " + e.target.value);
          if (regEx.test(e.target.value)) {
              console.log("Found invalid data.");//I don't get here with @ or *
              var failingChar = e.target.value.length - 1;
              e.target.value = e.target.value.substring(0, failingChar);
          }

  });

2 个答案:

答案 0 :(得分:2)

不使用字符串文字来定义正则表达式,而是使用正则表达式文字。

var regEx = /[^a-zA-Z0-9()\.'\-\_ ]/;

字符串文字将反斜杠解释为转义字符,因此需要对其进行转义。正则表达式文字不要求这样做。

根据Bergi的建议,你甚至不需要逃脱所有这些角色。

/[^a-zA-Z0-9().'_ -]/

您甚至可以使用常规\w字符。

/[^\w().' -]/

答案 1 :(得分:0)

var matchPattern = "[^a-zA-Z0-9()\\.'\\-\\_ ]";

会工作。