利用自定義的異常驗證郵箱合法性(不使用正則)
阿新 • • 發佈:2018-12-09
不用正則表示式,驗證郵箱合法性
a、本地驗證---驗證的是郵箱與密碼的格式 --郵箱:
1、要有@ . 2、@ . 前後不能為空 3、@要在 . 的前面
4、@前面的長度至少是10,包含數字,字母,且必須有大寫字母
b:網路驗證---驗證的是郵箱與密碼與伺服器儲存的是否相同
public class UserEmail {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 使用者
System.out.println("請輸入郵箱號" );
String user = sc.nextLine();
Email mail = new Email(user);
try {
mail.emilHeFa();
System.out.println("郵箱正確");
// 密碼
System.out.println("請輸入密碼");
String pw = sc.next();// 密碼不能有空格
PassWord passWord = new PassWord(pw);
try {
passWord.passWord();
System.out.println("密碼正確");
} catch (SeverPassWordException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
} catch (NUmException e) {
e.printStackTrace();
} catch (WeikongException e) {
e.printStackTrace();
} catch (OrderException e) {
e.printStackTrace();
} catch (LengthException e) {
e.printStackTrace();
} catch (SeverUserException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class NUmException extends Exception { // 第一種異常:沒有 @ 。
public NUmException() {
super();
}
public NUmException(String message) {
super(message);
}
}
class WeikongException extends Exception { // 第二種 @ 。 前後不能為空
public WeikongException() {
super();
}
public WeikongException(String message) {
super(message);
}
}
class OrderException extends Exception { // 第三種 @在。的前面
public OrderException() {
super();
}
public OrderException(String message) {
super(message);
}
}
class LengthException extends Exception { // 第四種 @前面的長度至少是10,包含數字,字母,且必須有大寫字母
public LengthException() {
super();
}
public LengthException(String message) {
super(message);
}
}
class SeverUserException extends Exception { // 伺服器使用者校驗
public SeverUserException() {
super();
}
public SeverUserException(String message) {
super(message);
}
}
class SeverPassWordException extends Exception { // 伺服器密碼校驗
public SeverPassWordException() {
super();
}
public SeverPassWordException(String message) {
super(message);
}
}
class Email {
private String mail;
public Email(String mail) {
this.mail = mail;
}
public String getMail() { // get set 方法
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public void emilHeFa() throws NUmException, WeikongException, OrderException, LengthException, SeverUserException {
// 第一種異常:沒有 @ 。
if (!(mail.contains("@") && mail.contains("."))) {
throw new NUmException("沒有 @ .");
}
// 第二種 @ 。 前後不能為空
if (mail.contains(" ") || mail.endsWith(".") || !shunXu(mail)) {
throw new WeikongException("@和.前後不能為空");
}
// 第三種 @在。的前面
if (mail.indexOf("@") > mail.indexOf(".")) {
throw new OrderException("格式不正確");
}
// 第四種 @前面的長度至少是10,必須有大寫字母 包含數字,字母
if (mail.indexOf("@") < 10 && !(bigLetter(mail))
|| ((numLetter(mail) && mail.indexOf("@") < 10 && !(bigLetter(mail))))) { // 保證全是大寫也可以
throw new LengthException("@前面的長度至少是10,包含數字,字母且必須有大寫字母");
}
// 假裝和伺服器使用者匹配
UAP c = new UAP();
String us = c.user;
if (!(mail.equals(us))) {
throw new SeverUserException("使用者名稱錯誤");
}
System.out.println("使用者正確");
}
//判斷@ 和 。 之間為空?
public boolean shunXu(String user) {
if ((mail.indexOf(".") - mail.indexOf("@") >1)) {
return true;
}
return false;
}
// 包含數字,字母
public boolean numLetter(String user) {
for (int i = 0; i < user.length(); i++) {
char a = user.charAt(i); // 返回指定索引的值
if (a >= 97 && a <= 122 || a >= 0 && a <= 9) { // 有小寫字母或數字 有返回true 沒有則false
return true;
}
}
return false;
}
// 必須有大寫字母
public boolean bigLetter(String user) {
for (int i = 0; i < user.length(); i++) { // 遍歷
char a = user.charAt(i);
if (a >= 65 && a <= 90) { // 有大寫字母返回true 沒有則false
return true;
}
}
return false;
}
}
class PassWord { // 與伺服器密碼匹配
private String pw;
public PassWord(String pw) {
this.pw = pw;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public void passWord() throws SeverPassWordException { // 假裝去伺服器驗證密碼
UAP c = new UAP();
String mi = c.pw;
if (!(pw.equals(mi))) {
throw new SeverPassWordException("使用者密碼不正確");
}
System.out.println("密碼通過");
}
}
class UAP { // 假裝一個伺服器
public static String user = "[email protected]";
public static String pw = "1234567";
}