2013-07-18 62 views
22

我不知道,因爲我的正則表達式是不正確的:範圍無序的字符類在javascript

var domain = "google\.com\.br"; 
var reEmail = new RegExp("^([A-Za-z0-9_\-\.])+\@" + domain + "$"); 

我需要這個來驗證電子郵件,例如:reEmail.test("[email protected]");

我得到這個錯誤:

範圍不按順序在字符類

+0

使用正則表達式字面:'/ ^([A-ZA-Z0-9 _ \ - ])+ @ /'! – Bergi

回答

43

因爲你使用字符串創建正則表達式的_\-\.變爲_-.,那是無效範圍。 (距離_.一個範圍,這是不正確的)

您需要雙逃生它:

new RegExp("^([A-Za-z0-9_\\-\\.])[email protected]" + domain + "$"); 

這樣的\\成爲String中\,然後用以逃避RegExp中的-

編輯:

例如:

如果通過字符串創建的RegExp它始終是有用的,這樣你看,如果你做的一切權利記錄結果你對正則表達式的一部分

console.log("^([A-Za-z0-9_\-\.])+\@"); 

結果:

^([A-Za-z0-9_-.])[email protected] 
+6

在附註中,處理這種情況的一種快速方法是,如果您需要在您的字符組中使用'-'作爲有效字符,則始終將其作爲組中的第一個或最後一個字符(例如'[[ -a-zA-Z0-9 _]'或'[a-zA-Z0-9 _-]')。正則表達式足夠聰明,知道你沒有指定一個具有該角色的範圍,如果它位於那些位置(不需要用斜線逃脫)。 – talemyn

+0

@talemyn當然,這是真的。我個人更喜歡逃避它(也將其設置爲我們的編碼準則),因爲它具有特殊的含義。 –

+0

這應該是接受的答案。 @talemyn也很好的補充 – adi