2011-10-18 95 views
0

我嘗試使用下面的代碼使用jQuery來驗證的十六進制值的字符串,但我得到意想不到的結果:jQuery的正則表達式返回意外的結果

var a = new RegExp("0x[a-fA-F0-9]+") 
var result = a.test('0x1n') 

在這種情況下,結果卻返回true。我在這裏錯過了什麼?

回答

2

你需要錨來匹配字符串的開始和結束。這將使匹配對整個字符串而不是隻是一個字符串的一部分的正則表達式的嘗試:

var a = new RegExp("^0x[a-fA-F0-9]+$") 

否則,你的正則表達式0x1部分相匹配,並返回true

在另一方面,以下將是一個好一點:

var re = /^0x[a-f0-9]+$/i; 

i標誌使得它不區分大小寫的,所以你不必指定a-fA-F

1

您的正則表達式匹配該字符串,因爲您沒有任何錨點。如果您將正則表達式更改爲^0x[a-fA-F0-9]+$,則字符串0x1n將不匹配。

編輯:爲了進一步解釋爲什麼你的字符串匹配,正則表達式實際上是試圖匹配包含0x隨後在[a-fA-F0-9]字符類的一個或多個字符的字符串。字符串0x1n包含0x後跟1,它在[a-fA-F0-9]字符類中。

添加錨點意味着您的字符串必須以0x開頭,然後以[a-fA-F0-9]字符類中的一個或多個字符結束。 0x1n將無法​​匹配,因爲它以不在該字符類中的n結尾。

+0

定界符?你的意思是錨嗎? :) –

+0

我不知道你在說什麼... :-) – CanSpice

1

它返回true,因爲您不需要整個字符串匹配該模式。試試這個:

var a = new RegExp("^0x[a-fA-F0-9]+$") 
相關問題