Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/Regex:Expression在一个环境中工作,而不是在另一个环境中工作_Javascript_Regex - Fatal编程技术网

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

Javascript/Regex:Expression在一个环境中工作,而不是在另一个环境中工作,javascript,regex,Javascript,Regex,我试图只允许输入字母数字或以下字符:'()-\。(包括“.”号) 我使用regexpal.com输入了这个正则表达式:[^a-zA-Z0-9()\.\-\\\\\\\\\] 它正确地将*和@识别为匹配项。令人困惑的是,我在.aspx页面上的javascript中有相同的精确表达式,它无法捕捉*或@。我已经确认它确实正在输入该函数,并且表达式的计算结果为。这是代码: $(".validateText").keyup(function (e) { var matchPatte

我试图只允许输入字母数字或以下字符:'()-\。(包括“.”号)

我使用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);
          }

  });

与其使用字符串文字来定义正则表达式,不如使用正则表达式文字

var regEx = /[^a-zA-Z0-9()\.'\-\_ ]/;
字符串文字将反斜杠解释为转义字符,因此需要对其进行转义。Regex文本不需要这个

按照Bergi的建议,你甚至不需要逃避所有这些角色

/[^a-zA-Z0-9().'_ -]/
您甚至可以使用常规的
\w
字符

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

可以用。

试试
console.log(匹配模式)
。你忘了逃避反斜杠。看起来我得到了这个:[^a-zA-Z0-9().-\]退出MatchPattern无需逃避
,而且
效果很好。我会在我能接受的时候接受。当我们讨论这个问题时,是否可以将您提供的正则表达式放入变量并调用测试?与直接说/[^a-zA-Z0-9()“-]/.test(foo)”相反?我需要做两个不同的正则表达式场景,并根据元素的ID提供正确的场景。我想您可以。注意,它不是字符串文字,而是正则表达式文字。
var matchPattern = "[^a-zA-Z0-9()\\.'\\-\\_ ]";