2011-07-08 206 views
0

我想匹配包含4个字符的字符串,由|在Java中jquery验证问题

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

当我在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的做到这一点。

谢谢!

回答

1

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

+0

谢谢,这时候我用单一的工作\ – jqueryEnthusiast

+0

如何以匹配任何数量的前导空格和尾部空格...... – jqueryEnthusiast

+0

最简单的方法是将'\ s *'添加到正则表达式的开头和结尾(即,在^之后和$之前) ')。唯一的缺点是我不认为这是检测它的最有效的方法。 – sdleihssirhc

2

需要双反斜杠在字符串中创建文字反斜杠。本身,反斜杠在字符串内被视为转义字符。为了创建一个文字\,你需要转义它\\

当你有一个正则表达式字面的JS,而不是一个字符串,你不需要逃避它:

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

使用单一\转义字符:

/^(\w{1,4})(\|(\w{1,4}))*$/i 
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