2010-06-28 50 views
0

我使用^[\w-\.\+][email protected]([\w-]+\.)+[\w-]{2,4}$驗證電子郵件地址,當我使用它從.aspx.cs它工作正常驗證IDN電子郵件,但是當我從aspx頁面直接使用它不起作用。這個正則表達式有什麼問題

return Regex.IsMatch(
       email, 
       @"^[\w-\.\+][email protected]([\w-]+\.)+[\w-]{2,4}$", 
       RegexOptions.Singleline); 

,我想驗證的樣子[email protected]ÖßÜÄÖ.com

我太糟糕了,在正則表達式做你們知道我在做什麼錯的ID?

回答

2

首先正確驗證電子郵件地址比正則表達式更復雜一些。但除此之外,正則表達式並沒有錯,但可能更像你如何使用它。

編輯(看完你的代碼後):你確定要測試的字符串沒有空格,並且在它裏面嗎?在那裏放置一個斷點並檢查字符串,這可能會讓您知道哪裏出了問題。

+0

它從.aspx.cs工作正常,我檢查服務器端的字符串,但我想保存一個服務器旅程,因此想驗證客戶端,並在該過程中,當我將上述正則表達式添加到asp:RegularExpressionValidator,它劑量工作。 – 2010-06-28 15:21:07

+0

我明白了。試試這個:'^ [\ w \ - \。\ +] + @([\ w \ - ] + \。)+ [\ w \ - ] {2,4} $' – Lucero 2010-06-28 15:29:58

+0

:(dosent work I've tested for [email protected]ÖßÜÄÖ.com。 – 2010-06-28 15:34:19

1

你應該逃避破折號( - )的第一個字符類中,並沒有必要點和加:

[\w\-.+] 

[\w.+-] 

沒有必要逃避破折號,如果它是最後一個字符。

+0

。+會匹配任何一個或多個字符,但他試圖匹配 – plor 2010-06-28 15:47:13

+1

@plor:在一個字符類中,'.'表示'.','+'表示'+'。只需要字符就可以了。 []''''''''和反斜槓本身。 – 2010-06-28 16:06:57

0

隨着「直接從ASPX頁面」你可能在正則表達式驗證是什麼意思?

然後你需要知道正則表達式是由一個不同的系統使用的:它有自己的正則表達式的實現。這意味着直接在.Net中工作的正則表達式可能會在js中失敗。

實現並沒有太大的不同,基本是相同的。但是細節上可能存在差異(例如未處理 - 是如何處理的)和js缺乏一些「高級功能」(儘管您的正則表達式看起來不太「先進」;-))。

您是否在瀏覽器中看到任何錯誤消息?

+0

不是除了「我的電子郵件地址無效」之外,瀏覽器中沒有錯誤控件的Text屬性:), – 2010-06-28 15:30:35

0

問題在於測試地址ÖßÜÄÖ中的那些非ASCII字符(您在@ HansKesting的回答中只提到了一條評論)。在.NET中,\w匹配所有的Unicode字母和數字,甚至連_之外的幾個字符被分類爲連接標點符號的,但在JavaScript中它只匹配[A-Za-z0-9_]

的JavaScript也缺乏對Unicode屬性的支持(如\p{L}信件)和蓋帽(\p{IsLatin}),所以你必須列出要允許他們Unicode的任何非ASCII字符轉義(\uXXXX)。如果你只是想支持Latin1字母,我想你可以使用[\w\u00C0-\u00FF],但IDN應該支持的不僅僅是Latin1,不是嗎?

順便說一下,JavaScript也不支持Singleline模式,即使它不會使用它。JS確實支持Multiline和IgnoreCase模式,但是無法在服務器和客戶端上設置它們。內聯修飾符(?i)(?m)在JS中不起作用,RegexOptions參數只能在服務器端工作。

幸運的是,您並不需要單線模式;它允許.元字符匹配換行符,但正則表達式中的唯一點匹配文字點。

相關問題