前言:
前一段时间,写了一个邮件的check。
其中有一个check选项是在@的右面不能有除字母数字 . - _以外的字符
于是,我写了如下的正则表达式 .*[@][[\w][.-_]]*$
问题:
java代码中使用时
String testMail = "sun@123@sun.com"
String mailRightCheckRel = “.*[@][[\\w][.-_]]*$”;
if (!testMail.matches(mailRightCheckRel)){
System.out.println("@的右侧有非法字符");
}
代码如果按照上面的那种方式写,这样的邮件地址就通过了
因为他只是查找是否含有这种格式的字符,从第二个@开始,确实含有
解决:
我们要做如下调整就OK了!
修正前;String mailRightCheckRel = “.*[@][[\\w][.-_]]*$”;
修正后;String mailRightCheckRel = “[^@]*[@][[\\w][.-_]]*$”;
总结:
在对于匹配某一个字符后面只能是某种匹配时,我们要注意
1.匹配到最后,在这里我们已经加上了$正则的结束标志。
2.确定从第一个这个字符开始。(第一个这个字符开始,是这次我所忽略的!)