2012-01-26 33 views
2

我有JavaScript的正則表達式this爲什麼這個特定的正則表達式在JavaScript中不起作用?

var myString="[email protected]"; 
var mailValidator = new RegExp("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); 
if (!mailValidator.test(myString)) 
{ 
    alert("incorrect"); 
} 

,但它不應該警惕 「不正確」 與[email protected]

它應該返回「不正確」aaaaaa.com而不是(例如)。

我在哪裏錯了?

+0

如果你想使用正則表達式驗證電子郵件地址,使用[這一個,而不是(http://stackoverflow.com/questions/46155/validate-email-address-in -javascript)。 –

+0

[爲什麼這個JavaScript的正則表達式不起作用?]的可能重複(http://stackoverflow.com/questions/7427731/why-this-javascript-regex-doesnt-work) – Jerry

回答

1

它的工作原理,如果你do this

var mailValidator = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; 

在你會發生什麼事是你需要加倍逃避反斜槓,因爲他們是在字符串中,像"\\w+([-+.]\\w+)*...etc

Here's a link that explains it(在「如何使用JavaScript RegExp對象「部分)。

2

當你創建一個字符串的正則表達式,你必須考慮到一個事實,即解析器會從字符串去掉反斜線之前,它必須被解析爲一個正則表達式的機會。因此,在RegExp()構造函數開始工作之前,所有\w標記已被更改爲字符串常量中的純「w」。您可以將反斜槓加倍,以便字符串解析只保留一個,也可以使用本地正則表達式常量語法。

1

嘗試var mailValidator = new RegExp("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");

相關問題