【发布时间】:2013-05-13 14:07:59
【问题描述】:
问题陈述是这样的:
我们需要创建一个名为emailId
的String数据类型必须使用适当的设置方法设置电子邮件 ID。
电子邮件ID检查的验证规则必须在main()中实现。
条件是:
电子邮件 ID 的总长度必须 >3 且
emailId 必须包含“@”,后跟最少 1 个和最多 2 个“。”字符。
“@”之前的子字符串必须包含大写、小写和“_”(下划线)符号的组合。
电子邮件 ID 的第一个字母必须大写。
如果上述所有条件都有效,则应显示“Email ID 有效”,否则应显示相应的错误消息
这是我的代码:
public class EmailCheck {
String emailId;
public void setEmailId(String emailId){
this.emailId=emailId;
}
public String getEmailId(){
return emailId;
}
public static void main(String[] args) {
EmailCheck em = new EmailCheck();
em.setEmailId("CFDV@gm.a.il.com");
String email = em.getEmailId();
int length = email.length();
boolean flag1 = false;
boolean flag2 = false;
boolean flag3 = false;
boolean flag4 = false;
boolean flag5 = false;
boolean flag6 = false;
boolean flag7 = false;
int count = 0;
//Condition 1
if((length>3 && length<20)== true)
flag1 = true;
else
flag1 = false;
//Condition 2
int temp = email.length();
if(email.contains("@")){
flag2=true;
int a=email.indexOf("@");
for(int i=a;i<temp;i++){
if(email.charAt(i)=='.'){
flag3=true;
count=count+1;
}
}
if(count<1||count>2){
flag4=false;
}
else{
flag4=true;
}
}
else{
flag2 =false;
System.out.println("No @ symbol present");
}
//Condition 3
if(email.matches("[A-Z a-z _]+@.*")) //Unable to get the right RegEx here!
flag5 = true;
else
flag5 = false;
//Condition4
if(Character.isUpperCase(email.charAt(0))==true)
flag6 = true;
else
flag6=false;
if(flag1==true && flag2==true && flag3==true && flag4==true && flag5==true &&flag6==true)
System.out.println("Email ID is valid");
else{
if(flag1==false)
System.out.println("Inavlid length of Email ID");
if(flag2==false||flag3==false||flag4==false)
System.out.println("Invalid Position of Special Characters");
if(flag5==false)
System.out.println("Invalid combination for username");
if(flag6==false)
System.out.println("Invalid case of first letter");
}
}
}
我不确定条件 #2(逻辑?)和条件 #3(RegExp 部分)。一些测试用例看起来是正确的,其余的都是错误的(我认为是由于 #2 和 esp #3 中的逻辑错误。)
请告诉我必须在此处进行哪些更改才能获得正确的输出。 谢谢!
【问题讨论】:
-
你的每一条验证规则都是错误的。不要这样做。
-
旁注:
if((length>3 && length<20)== true)应该是if(length>3 && length<20) -
@Slaks 你能建议我应该改进什么吗?
-
摆脱它们。有效电子邮件地址的规则极其复杂;你应该使用commons.apache.org/proper/commons-validator/apidocs/org/apache/…
-
@Kyle:我想不出在任何正常情况下任何规则都是正确的。