我正在研究信用卡验证Java程序,并且坚持如何正确设置正则表达式的格式以检查抄送号码是否以4开头。 这就是我所拥有的:
if (cardNum.matches("^4\\d"))
答案 0 :(得分:1)
String#matches
函数将您指定的模式应用于 entire 字符串输入。因此,您可能会想到以下几点:
if (cardNum.matches("^4\\d+")) {
// then CC starts with 4, followed by more numbers
}
但是请注意,创建正则表达式以验证各种类型的信用卡号的问题是一个古老的问题,并且已经得到解决。看看here了解更多信息。
答案 1 :(得分:0)
现在,您的正则表达式将仅匹配字符串“ 4 \ d”。如果您希望它的意思是“ 4,然后是0或更多的小数”,则应像这样4\d*
答案 2 :(得分:0)
由于您匹配整个信用卡号,并且您正在使用s.matches()
。
并且您可以看到matches实际上正在检查调用该方法的整个字符串:
告诉此字符串是否与给定的正则表达式匹配。
它还提到:
以str.matches(regex)形式调用此方法所产生的结果与以下表达式完全相同:
Pattern.matches(regex, str)
因此Pattern提供了有关regex
的工作方式的详细信息。
\ d =>数字:[0-9]
^ =>行首
X + => X,一次或多次
对于您而言,您需要确保 regex模式与整个信用卡号匹配。
if (cardNum.matches("^4\\d+"));
如果您需要指定长度范围以消除无效数字:
X {n,m} => X,至少n次但不超过m次
您需要将其指定为:
if (cardNum.matches("^4\\d{16,19}"));
如果要检查大量数字,则最好转到Pattern
,以避免出现senseless pattern compiling overhead的情况,
private final static Pattern CREDIT_CARD_PATTERN = Pattern.compile("^4\\d+");
if (CREDIT_CARD_PATTERN.matcher(s).matches());
当它包含连字符或空格时,可以将regex
用作:
"^4\\d{3}-\\d{4}-\\d{4}-\\d{3}"
以匹配4485-7622-4840-4312
; ^4\\d{3}\s*\\d{4}\\s*\\d{4}\\s*\\d{4}
以匹配4485762248404312
和4485 7622 4840 4312
;