public static boolean validateBankCardNo(String bankCardNo){
Pattern pattern=Pattern.compile("^[34569]{1,6}\d{13}$");
return pattern.matcher(bankCardNo).matches();
}
^[3456]{1}\d{13,18}$
^([3456])\1{6}
满足第一个为ture,满足第二个为false;可以达到效果
您可以使用正则表达式的"零宽断言"来实现只用一条正则表达式的校验。零宽断言允许你指定一个条件,在匹配的过程中检查这个条件是否满足。比如说,在本题中,您可以使用(?=...)来检查首位是否是34569,并且使用(?!...)来检查首位开始的6位是否不重复。
代码如下:
public static boolean validateBankCardNo(String bankCardNo){
Pattern pattern = Pattern.compile("^(?=[34569]{1,6})(?!\\1{6})([34569]{1,6}\\d{8,13})$");
return pattern.matcher(bankCardNo).matches();
}
其中(?=[34569]{1,6})是首位限制,(?!\1{6})是首位连续六位不重复限制,([34569]{1,6}\d{8,13})是纯数字和位数限制。