2011-07-08 254 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