结果为
请输入会员生日<月/日:00/00>: 12.9
生日形式输入错误!
请输入会员生日<月/日:00/00>: 12/9
该会员生日是:12/9
请输入会员密码<6-10位>: 8101910
该会员密码是:8101910
参考代码如下:
import java.util.Scanner;
public class Member {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 输入生日并检查生日格式是否正确
String birthday;
do {
System.out.print("请输入会员生日<月/日:00/00>:");
birthday = scanner.nextLine();
} while (!isValidBirthdayFormat(birthday) && prompt("生日形式输入错误!"));
System.out.println("该会员生日是:" + birthday);
// 输入密码并检查密码长度是否符合要求
String password;
do {
System.out.print("请输入会员密码<6-10位>:");
password = scanner.nextLine();
} while (!isValidPasswordLength(password) && prompt("密码长度不符合要求!"));
System.out.println("该会员密码是:" + password);
}
private static boolean isValidBirthdayFormat(String birthday) {
// 检查生日格式是否为"月/日"
return birthday.matches("\\d{1,2}/\\d{1,2}");
}
private static boolean isValidPasswordLength(String password) {
// 检查密码长度是否在6-10位之间
return password.length() >= 6 && password.length() <= 10;
}
private static boolean prompt(String message) {
System.out.println(message);
return true;
}
}
public class AccountTest {
public static void main(String[] args) {
while (true) {
System.out.print("请输入会员生日<月/日:00/00>: ");
Scanner scanner = new Scanner(System.in);
String birthday = scanner.nextLine();
String[] split = birthday.split("/");
if (split.length != 2) {
System.out.println("生日形式输入错误!");
continue;
}
try {
int month = Integer.parseInt(split[0]);
int day = Integer.parseInt(split[1]);
// 判断月份和天数的有效性
// 这里给出一个简单的判断,实际需要按月判断天数的最大值
if (month < 1 || month > 12 || day < 1 || day > 31) {
System.out.println("生日形式输入错误!");
continue;
}
} catch (RuntimeException e) {
System.out.println("生日形式输入错误!");
continue;
}
System.out.println("该会员生日是:" + birthday);
System.out.print("请输入会员密码<6-10位>:");
String password = scanner.nextLine();
if (password.length() < 6 || password.length() > 10) {
System.out.println("密码输入错误!");
continue;
}
System.out.println("该会员密码是:" + password);
break;
}
}
}
针对问题的解决方案如下:
(1) 在前端页面上,可以采用正则表达式检验生日格式是否符合“月/日”的形式。代码示例如下:
<input type="text" name="birthday" onblur="checkBirthday()" />
<script>
function checkBirthday() {
var birthday = document.getElementsByName("birthday")[0].value;
var pattern = /^([1-9]|1[0-2])\/([1-9]|[1-2][0-9]|3[0-1])$/;
if (!pattern.test(birthday)) {
alert("生日格式应为:月/日");
document.getElementsByName("birthday")[0].focus();
}
}
</script>
(2) 在后端程序中,也可以采用正则表达式检验生日格式是否符合“月/日”的形式。代码示例如下:
public boolean checkBirthday(String birthday) {
String pattern = "^(0?[1-9]|1[0-2])\\/(0?[1-9]|[1-2][0-9]|3[0-1])$";
return Pattern.matches(pattern, birthday);
}
如果输入错误,则可以通过抛出异常或者返回错误信息来提示用户重新输入。
在前端页面上,可以通过添加maxlength属性限制密码长度,并在前端页面上对密码长度进行限制和提示。代码示例如下:
<input type="password" name="password" maxlength="10" onblur="checkPassword()" />
<script>
function checkPassword() {
var password = document.getElementsByName("password")[0].value;
if (password.length < 6 || password.length > 10) {
alert("密码长度应为6~10位");
document.getElementsByName("password")[0].focus();
}
}
</script>
在后端程序中,也可以对密码长度进行检验。代码示例如下:
public boolean checkPassword(String password) {
return password.length() >= 6 && password.length() <= 10;
}
如果输入的密码长度不符合要求,则可以通过抛出异常或者返回错误信息来提示用户重新输入。
需要注意的是,在前端页面上只是起到了一种提示作用,而在后端程序中才真正进行了数据校验并发出了错误提示。因此,对于需要对数据进行严格控制的项目来说,后端程序的数据校验是必不可少的。