2010-08-03 74 views
1

大家好,我有以下至REGx無法在JavaScript的不能測試JavaScript正則表達式正確

if ($(caller).attr('value').toString().search('/(?=\D*\d\D*\d).{8,15}/g') == -1) 

其中

$(caller).attr('value').toString() = "fdsddfsd45" 

它返回到我-1被接受

另外我試着從圖案測試它

if (!pattern.test($(caller).attr('value'))) { 

其中

pattern = /^(?=D*dD*d).{8,15}$/ 

它返回到我

$(caller).attr('value').toString() = "fdsddfsd45" 

,當我試圖通過所謂RegExr這串 「fdsddfsd45」 匹配表達式(桌面應用程序來測試它?= \ d * \ d \ D * \ d)。{8,15}這是我不知道的JavaScript錯誤嗎?

+0

如果我可以,你在那裏檢查什麼?它看起來像是在測試字符串是否至少有8個字符長,並且有兩個數字。正則表達式似乎是錯誤的,或者至少過於複雜。你能描述你想做什麼嗎? 最後一個注意事項 - 你沒有完全說出你在做什麼,但你可能已經忘記了開始和結束的錨點:'^ ... $' – Kobi 2010-08-03 08:51:17

回答

2

在JavaScript中,正則表達式應該是一個字符串或一個正則表達式。在你的情況下,這應該這樣做:

.search(/(?=\D*\d\D*\d).{8,15}/) == -1 

請注意,我刪除了單引號。我也刪除了/g標誌 - 因爲你正在尋找任何匹配,你不需要它。

爲了完整起見,雖然用處不大,你可以寫正則表達式作爲一個字符串,但你必須逃離所有的反斜線,或JavaScript將解析\dd它甚至達到了正則表達式之前。在這種情況下,你不需要斜槓(不像PHP,例如,它同時使用):

s.search('(?=\\D*\\d\\D*\\d).{8,15}') 

例子:http://jsbin.com/ubuce3

-1
"fdsddfsd45".search(/^(?=\D*\d\D*\d).{8,15}$/g) 

將返回0,要小心 「'」字符!

/^(?=\D*\d\D*\d).{8,15}$/.test("fdsddfsd45") 

將返回true!