2011-10-04 63 views
1

我需要確保電子郵件有效。而且我還需要檢查其中是否存在任何可疑的UTF字符。我不驗證它與正則表達式驗證UTF的Java電子郵件驗證

^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$ 

但是,如何檢查它的UTF?

感謝

+0

我沒有看到任何可以匹配任何怪異字符的正則表達式。你總是在做'a-z'等等,而不是'''或者任何東西。 –

回答

0

你想確保它是有效的w.r.t. RFC 5335 section 4.1

如果是這樣,您只能檢查一個byte[]是否是有效的UTF-8。由於UTF-8是字節串到碼點串的映射,而UTF-16是碼字串映射的字節串,因此嘗試驗證一系列UTF-16代碼單元(Java char s)或代碼點是有效的UTF-8是沒有意義的。是代碼單元 - >unicode-scalar-values的映射。 "Unicode Encoding Forms"的第3.9節解釋了所有這些。

告訴byte[]是否是良好形成的UTF-8序列的最佳方法是使用內置的解碼器,例如一個StandardCharsets.UTF8或番石榴等價物Charsets.UTF8

0

如果你想確保只有ASCII字符的電子郵件地址,您可以使用這一模式:

"[^\\x00-\\x7F]" 

它將馬赫任何非ASCII字符。