邮箱验证
电子邮件(E-mail)是雷·汤姆林森于1971年对已有的传输文件程序以及信息程序进行研究,研制出一套程序。
在网络中,电子邮箱可以自动接收网络任何电子邮箱所发的电子邮件,并能存储规定大小的等多种格式的电子文件。电子邮箱具有单独的网络域名,其电子邮局地址在@后标注,电子邮箱一般格式为:用户名@域名。
验证用户邮箱的合法性,用户邮箱必须满足以下规则:
- 格式:name@host;
- name只能由字母、数字、下划线组成;
- 且name只能以字母开头至少包含大写字母、小写字母、数字、下划线中的三种;
- host中必须包含字符“.”,且“.”不能在host部分的两头;
思路梳理:
- 使用String类方法Split()将邮箱以“@”符为界分为两个字符串.
- 先分析name部分的要求,再分析host部分,将问题简单化.
- 将需要用的方法一一写在下方,比如是否含大写字母、是否含数字……
- 写出总的判断方法,其中调用已经写好的是否含有大写字母、数字等方法,以不符合条件返回false为主思路,最后返回true.
验证用户邮箱案例实现代码:
package cn.maidaotech.java10.chapter02;
//验证邮箱是否符合规则:name @ host,
//满足以下所有规则:
//name只能由字母、数字、下划线组成;
//只能以字母开头
//至少包含大写字母、小写字母、数字、下划线中的三种
//host中必须包含字符“.”,
//且“.”不能在host部分的两头
public class Email {
public static void main(String[] args) {
// System.out.println(checkEmail("wang123_@bin.g") ? "合法" : "不合法");
System.out.println(checkEmail("wang123@bing.cn") ? "合法" : "不合法");
// System.out.println(checkEmail("a_1a1@1.0") ? "合法" : "不合法");
}
private static boolean checkEmail(String s) {
isAt(s);
s.split("@");
String[] two = s.split("@");
if (two.length < 2) {
return false;
}
String name = two[0];
String host = two[1];
int judgeNum = 0;
if (hasLowerCase(name)) {
judgeNum += 1;
}
if (hasUnderline(name)) {
judgeNum += 1;
}
if (hasNumber(name)) {
judgeNum += 1;
}
if (hasUpperCase(name)) {
judgeNum += 1;
}
if (judgeNum < 3) {
return false;
}
if (!isLetter(name.charAt(0))) {
return false;
}
for (int i = 0; i < name.length(); i++) {
char nameChar = name.charAt(i);
// name是字母和数字下划线
if (!isLetter(nameChar) && !isnumber(nameChar) && nameChar != '_') {
return false;
}
}
char statr = host.charAt(0);
char end = host.charAt(host.length() - 1);
if (!host.contains(".")) {
return false;
}
if (statr == '.' || end == '.') {
return false;
}
return true;
}
// 字符串中是否含有@符号
private static boolean isAt(String s) {
if (s.contains("@")) {
return true;
}
return false;
}
// 是不是大写字母
private static boolean isUpperCase(char c) {
if (c >= 'A' && c <= 'Z') {
return true;
}
return false;
}
// 是不是小写字母
private static boolean isLowerCase(char c) {
if (c >= 'a' && c <= 'z') {
return true;
}
return false;
}
// 是不是大小写字母
private static boolean isLetter(char c) {
if (isLowerCase(c) || isUpperCase(c)) {
return true;
}
return false;
}
// 是不是数字
private static boolean isnumber(char c) {
if (c >= '0' && c <= '9') {
return true;
}
return false;
}
// 包含下划线
private static boolean hasUnderline(String s) {
if (s.contains("_")) {
return true;
}
return false;
}
// 包含数字
private static boolean hasNumber(String s) {
for (int i = 0; i < s.length(); i++) {
char cc = s.charAt(i);
if (isnumber(cc)) {
return true;
}
}
return false;
}
// 包含小写字母
private static boolean hasLowerCase(String s) {
for (int i = 0; i < s.length(); i++) {
char cc = s.charAt(i);
if (isLowerCase(cc)) {
return true;
}
}
return false;
}
// 包含大写字母
private static boolean hasUpperCase(String s) {
for (int i = 0; i < s.length(); i++) {
char cc = s.charAt(i);
if (isUpperCase(cc)) {
return true;
}
}
return false;
}
}