String的Java Regex以数字和固定长度开头

我做了一个正则表达式来检查String的长度,所有字符都是数字并以数字开头,例如123以下是我的表达式

REGEX =^123\\d+{9}$"; 

但它无法检查String的长度。 它validation那些字符串只有它们的长度是9并从123开始。但是如果我传递字符串1234567891它也validation它。 但是我应该怎么做呢?我身上哪个错误。

就像这里已经回答的那样,最简单的方法就是删除+

 ^123\\d{9}$ 

要么

 ^123\\d{6}$ 

根据您的需要而定。

你也可以使用另一种,更复杂和通用的方法,一种消极的前瞻:

 (?!.{10,})^123\\d+$ 

说明:

这个: (?!.{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 }