**
邮箱注册模拟
**
一:验证邮箱
- 邮箱必须由数字、字母、下划线、@、. 组成
- 邮箱格式必须满足 a@b.c,
其中a必须是数字、字母、下划线
b部分必须是字母或数字
c部分必须是字母与.,例如 aaa@cc.edu.cn
二:验证密码
- 密码只能由数字、大写字母、小写字母、下划线组成
- 密码长度必须是8-20位
- 密码必须包含数字、大写字母、小写字母、下划线
- 密码必须包含大写字母
三:验证手机号
- 手机号必须是11位数字
- 手机号前三位必须是130-139,158-159,186
变量定义
boolean flag = false;
String email = null;//邮箱
String password = null;//密码
String phone_num = null;//手机号
Scanner input = new Scanner(System.in);
验证邮箱
当然,验证邮箱格式可以直接用:
String str="^([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)*@([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)+[\\.][A-Za-z]{2,3}([\\.][A-Za-z]{2})?$";
再通过 matcher() 来判断,但这里为了练习字符串操作,所以不使用该方法。
System.out.println("请输入邮箱:");
while(!flag) {
email = input.next();
//获取字符串的每一个字符,并判断是否合法
char[] chars = email.toCharArray();//使用数字存放字符串中的每一个字符
for(int i = 0 ; i < email.length() ; i++) {
if((chars[i] >='0'&& chars[i] <='9') || (chars[i] >='a' && chars[i] <='z') || (chars[i] >='A' && chars[i] <= 'Z') || chars[i] == '@' || chars[i] == '.' || chars[i] == '_') {
flag=true;
}else {
flag = false;
break;//邮箱格式错误,跳出 for 循环
}
}
if(!flag) {
System.out.println("邮箱格式错误:邮箱必须是数字、字母、下划线、@、. 组成!");
flag = false;
continue;//执行下一次 while 循环,重新输入邮箱
}
//用substring()将字符串截取为A、B、C三部分:A @ B . c
String partA = email.substring(0,email.indexOf("@"));
//System.out.println(partA.length());
String partB = email.substring(email.indexOf("@")+1,email.indexOf("."));
//System.out.println(partB.length());
String partC = email.substring(email.indexOf(".")+1);
//System.out.println(partC.length());
//判断A部分是否合法
char[] chars_partA = partA.toCharArray();
for(int i = 0 ; i < partA.length(); i++) {
if((chars_partA[i] >='0' && chars_partA[i] <='9') || (chars_partA[i] >= 'a' && chars_partA[i] <='z') || (chars_partA[i] >= 'A' && chars_partA[i] <= 'Z') || chars_partA[i] == '_') {
flag=true;
}else {
flag=false;
break;//邮箱格式错误,跳出 for 循环
}
}
if(!flag) {
System.out.println("邮箱格式错误:A部分必须是数字、字母、下划线");
flag = false;
continue;//执行下一次 while 循环,重新输入邮箱
}
//判断B部分是否合法
char[] chars_partB = partB.toCharArray();
for(int i = 0 ; i < partB.length() ; i++) {
if((chars_partB[i] >= '0' && chars_partB[i] <= '9') || (chars_partB[i] >= 'a' && chars_partB[i] <= 'z') || (chars_partB[i] >= 'A' && chars_partB[i] <= 'Z')) {
flag=true;
}else {
flag = false;
break;//邮箱格式错误,跳出 for 循环
}
}
if(!flag) {
System.out.println("邮箱格式错误:B部分必须是字母或数字");
flag = false;
continue;//执行下一次 while 循环,重新输入邮箱
}
//判断C部分是否合法
char[] chars_partC = partC.toCharArray();
for(int i = 0 ; i < partC.length() ; i++) {
if((chars_partC[i] >= 'a' && chars_partC[i] <= 'z') || (chars_partC[i] >= 'A' && chars_partC[i] <= 'Z') || chars_partC[i] == '.') {
flag=true;
}else {
flag = false;
break;//邮箱格式错误,跳出 for 循环
}
}
if(!flag) {
System.out.println("邮箱格式错误:C部分必须是字母与.");
flag = false;
continue;//执行下一次 while 循环,重新输入邮箱
}
}
flag=false;//验证邮箱结束, flag 重新赋为false
验证密码:
此段代码中有一个跳出循环嵌套的操作,需要从内层循环跳出来,执行下一次外层循环,具体操作如下:
loop:while(...){
for(...){
if(...){
continue loop;//跳到外层循环
}
}
}
loop: while(!flag) {
System.out.println("请输入密码");
password = input.next();
if(password.length()<8 || password.length()>20) {
System.out.println("密码格式错误:密码长度必须是8-20位");
flag = false;
continue;
}
char[] chars_password = password.toCharArray();
//判断密码是否只由数字、大写字母、小写字母、下划线组成
for(int i = 0 ; i < password.length() ; i++) {
if((chars_password[i] >='0'&& chars_password[i] <='9') || (chars_password[i] >='a' && chars_password[i] <='z') || (chars_password[i] >='A' && chars_password[i] <= 'Z') || chars_password[i] == '_') {
flag=true;
}else {
flag = false;
}
}
if(!flag) {
System.out.println("密码格式错误:密码只能是数字、大写字母、小写字母、下划线");
flag = false;
continue;
}
//判断密码是否包含大写字母
for(int i = 0 ; i < password.length() ; i++) {
if((chars_password[i] >='A' && chars_password[i] <= 'Z')) {
flag=true;
break;
}else {
System.out.println("密码格式错误:密码必须包含大写字母");
flag = false;
continue loop;
}
}
//判断密码是否包含数字
for(int i = 0 ; i < password.length() ; i++) {
if((chars_password[i] >='0'&& chars_password[i] <='9') ) {
flag=true;
}else {
flag = false;
}
}
//判断密码是否包含小写字母
for(int i = 0 ; i < password.length() ; i++) {
if((chars_password[i] >='a' && chars_password[i] <='z')) {
flag=true;
}else {
flag = false;
}
}
//判断密码是否包含下划线
for(int i = 0 ; i < password.length() ; i++) {
if(chars_password[i] >='_') {
flag=true;
break;
}else {
flag = false;
}
}
if(!flag) {
System.out.println("密码格式错误:密码必须包含数字、大写字母、小写字母、下划线");
flag = false;
continue;
}
}
flag=false; //验证密码结束, flag 重新赋为false
验证手机号
while(!flag) {
System.out.println("请输入手机号:");
phone_num = input.next();
if(phone_num.length() != 11) {
System.out.println("手机号格式错误:手机号必须是11位数字");
flag = false;
continue;
}else {
flag =true;
}
int number_three = Integer.valueOf(phone_num.substring(0,3));
System.out.println(number_three);
if((number_three>=130 && number_three<=139) || (number_three>=158 && number_three<=159) || number_three == 186) {
flag =true;
}else {
System.out.println("手机号格式错误:手机号前三位必须是130-139,158-159,186");
flag = false;
continue;
}
}
System.out.printf("邮箱:%s\n密码:%s\n手机号:%s",email,password,phone_num);//输出结果
运行结果