我做了一个正则表达式来检查 String 的长度,所有字符都是数字并以数字开头,例如 123 以下是我的表达式
REGEX =^123\\d+{9}$";
但它无法检查字符串的长度。它仅验证这些字符串的长度为 9 并以 123 开头。但如果我通过字符串 1234567891 它也会验证它。但是我该怎么做呢?
就像这里已经回答的那样,最简单的方法就是删除+
:
^123\\d{9}$
或者
^123\\d{6}$
具体取决于你需要什么。
您还可以使用另一种更复杂和通用的方法,即负前瞻:
(?!.{10,})^123\\d+$
解释:
this :(?!.{10,})
是一个否定的前瞻(?=
将是一个肯定的前瞻),这意味着如果前瞻之后的表达式匹配这个模式,那么整个字符串不匹配。大致意思是:仅当否定预读中的模式不匹配时,才满足此正则表达式的条件。
在这种情况下,字符串仅在不匹配时才匹配.{10}
,即 10 个或更多字符,因此仅在前面的模式匹配最多 9 个字符时才匹配。
积极的前瞻则相反,只有在前瞻中的标准也匹配时才匹配。
只是出于好奇而将其放在这里,它比您需要的要复杂得多。
尝试使用这个:
^123\\d{6}$
我将其更改为6
因为 1、2 和 3 可能仍应算作数字。
另外,我删除了+
. 有了它,它将匹配 1 个或多个\d
s(因此有无限数量的数字)。
根据您在Doorknobs 答案下方的评论,您可以执行以下操作:
int length = 9;
String prefix = "123"; // or whatever
String regex = "^" + prefix + "\\d{ " + (length - prefix.length()) + "}$";
if (input.matches(regex)) {
// good
} else {
// bad
}