jquery验证问题

时间:2011-07-08 18:37:07

标签: jquery regex

我正在尝试匹配包含由|

分隔的4个字符的字符串

当我使用"(\\w{1,4})(\\|(\\w{1,4}))*"

时,在java中运行正常

当我在jquery中使用相同的模式时,它不匹配:

$.validator.addMethod("nameId",function(value,element){
return this.optional(element) || /^(\\w{1,4})(\\|(\\w{1,4}))*$/i.test(value);
},"Please enter valid input.");

任何人都可以让我知道如何在jquery中这样做。

谢谢!

4 个答案:

答案 0 :(得分:2)

需要双反斜杠才能在字符串中创建文字反斜杠。反斜杠本身被视为字符串中的转义字符。要创建文字\,您需要将其\\转义。

由于JS中有正则表达式 literal 而不是字符串,因此您无需转义它:

/^(\w{1,4})(\|(\w{1,4}))*$/

答案 1 :(得分:1)

我的猜测是因为你包含了双反斜杠。如果您将\\w更改为\w等,是否可以解决问题?

答案 2 :(得分:1)

使用单个\作为转义字符:

/^(\w{1,4})(\|(\w{1,4}))*$/i

答案 3 :(得分:1)

Javascript中的正则表达式是一流的,而不是字符串,因此您不需要加倍反斜杠(这会产生文字反斜杠)。

试试这个

/^(\w{1,4})(\|(\w{1,4}))*$/i

编辑: 这与该问题没有直接关系,但对此正则表达式进行了一些其他改进:

  • 因为你只测试一个匹配而不使用它,你应该使用非捕获括号
  • 围绕\ w的括号并且不需要重复

应用这些更改会导致稍快一些(在我看来更具可读性)

/^\w{1,4}(?:\|\w{1,4})*$/i

我在这里创建了一个快速比较:http://jsperf.com/capturing-vs-non-capturing-regex-parentheses