【发布时间】:2015-08-05 14:12:17
【问题描述】:
我了解使用 Regex 验证电子邮件只需 3-4 行代码。但是,我正在寻找验证电子邮件 without using Regex. 在某种程度上,代码成功通过了几乎所有的验证,但是,仍然无法弄清楚 -如何避免特殊字符成为电子邮件地址的第一个和最后一个字符。
特殊字符列表 = {'!', '#', '$', '%', '^', '&', '*', '(', ')', '-', '/', '~', '[', ']'} ;
我看到的是:
如果用户名部分 (
abc.xyz@gmail.com) 以 任何特殊字符,它应该触发 “无效的电子邮件 地址”错误。域部分也是如此。
例如...下面的email-IDs列表应该打印一个“无效的email ID” error message
#abc.xyz@gmail.com
abc.xyz&@gmail.com
abc.xyz&@!gmail.com
abc.xyz&@gmail.com!
import java.util.Scanner;
public class Email_Validation {
public static void main(String[] args) {
// User-input code
Scanner scan = new Scanner(System.in);
System.out.println("Enter your email address");
String email = scan.next();
// Code to check if email ends with '.' (period sign)
boolean checkEndDot = false;
checkEndDot = email.endsWith(".");
// Code to find out last index of '@' sign
int indexOfAt = email.indexOf('@');
int lastIndexOfAt = email.lastIndexOf('.');
//Code to check occurence of @ in the email address
int countOfAt = 0;
for (int i = 0; i < email.length(); i++) {
if(email.charAt(i)=='@')
countOfAt++; }
// Code to check occurence of [period sign i..e, "."] after @
String buffering = email.substring(email.indexOf('@')+1, email.length());
int len = buffering.length();
int countOfDotAfterAt = 0;
for (int i=0; i < len; i++) {
if(buffering.charAt(i)=='.')
countOfDotAfterAt++; }
// Code to print userName & domainName
String userName = email.substring(0, email.indexOf('@'));
String domainName = email.substring(email.indexOf('@')+1, email.length());
System.out.println("\n");
if ((countOfAt==1) && (userName.endsWith(".")==false) && (countOfDotAfterAt ==1) &&
((indexOfAt+3) <= (lastIndexOfAt) && !checkEndDot)) {
System.out.println("\"Valid email address\"");}
else {
System.out.println("\n\"Invalid email address\""); }
System.out.println("\n");
System.out.println("User name: " +userName+ "\n" + "Domain name: " +domainName);
}
}
我该如何解决这个问题?
【问题讨论】:
标签: java email-validation