我需要验证国际电子邮件ID的用户名和域名在外国字符。为此,我使用 InternetAddress()
上课地点 javax.mail.internet.InternetAddress
. 虽然这项技术对某些语言很有效,但对少数语言却不起作用。
我编写了一个小程序来测试它是否可以验证电子邮件地址:
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
public class EmailTest {
public static boolean isEmailValid(String emailId) throws AddressException {
InternetAddress internetAddress = new InternetAddress(emailId);
internetAddress.validate();
return true;
}
public static void main(String[] args){
String[] emailIds = {
"jayesh平仮名@aio.com",
"用户@例子.广告",
"用户@例子.广告.net",
"अजय@डाटा.भारत.in",
"अजय@डाटा.भारत",
"अजय@gmail.com",
"квіточка@пошта.укр",
"χρήστης@παράδειγμα.ελ",
"Dörte@Sörensen.example.com",
"коля@пример.рф",
"иван.сергеев@пример.рф"
};
for(String s:emailIds){
try{
if(isEmailValid(s)){
System.out.println(s + " -> Valid");
}
}catch (AddressException e) {
System.out.println(s + " -> InValid; Reason: " + e);
}
}
}
}
输出:
jayesh平仮名@aio.com -> Valid
用户@例子.广告 -> Valid
用户@例子.广告.net -> Valid
अजय@डाटा.भारत.in -> InValid; Reason: javax.mail.internet.AddressException: Domain contains illegal character in string ``अजय@डाटा.भारत.in''
अजय@डाटा.भारत -> InValid; Reason: javax.mail.internet.AddressException: Domain contains illegal character in string ``अजय@डाटा.भारत''
अजय@gmail.com -> Valid
квіточка@пошта.укр -> Valid
χρήστης@παράδειγμα.ελ -> Valid
Dörte@Sörensen.example.com -> Valid
коля@пример.рф -> Valid
иван.сергеев@пример.рф -> Valid
如你所见 用户@例子.广告
显示为有效,而 अजय@डाटा.भारत
显示为无效的电子邮件地址。
这种行为背后的原因是什么?有没有办法解决这个问题,这样它就可以验证所有的语言?
1条答案
按热度按时间xqnpmsa81#
如果添加一堆字母,并检查域名:
अजय@डाटा.भारत -> 无效;原因:javax.mail.internet.addressexception:域的字符串中包含非法字符``अजय@डाटा.भारत''
अ : 梵文字母a,#5,阿尔法真
ज : 梵文字母ja,#5,阿尔法真
य : 梵文字母ya,#5,阿尔法真
@:商业,18,阿尔法假
ड : 梵文字母dda,#5,alpha true
ा : 天成文书元音标记aa,#8,alpha true
ट : 梵文字母tta,#5,阿尔法真
ा : 天成文书元音标记aa,#8,alpha true
. : 句号,#18,alpha false
भ : 梵文字母bha,#5,阿尔法真
ा : 天成文书元音标记aa,#8,alpha true
र : 梵文字母ra,#5,阿尔法真
त : 梵文字母ta,#5,阿尔法真
如果有人要删除元音符号,电子邮件地址是可以接受的。
我尝试使用unicode标准化(结合devangari元音符号)没有用,它可以用于结合音调符号,使用
java.text.Normalizer
.因为我不熟悉梵文伽里文字,你可以自己研究一下。