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

时间:2013-02-19 12:57:18

标签: java regex

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

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

但它无法检查String的长度。它验证那些字符串只有它们的长度是9并且以123开头。 但是,如果我传递字符串1234567891它也验证它。但是我应该怎么做才能解决我身上出错的问题。

3 个答案:

答案 0 :(得分:6)

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

^123\\d{9}$

^123\\d{6}$

取决于您的确切需求。

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

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

说明:

这:(?!.{10,})是一个负面预测?=将是一个积极的预测),这意味着如果前瞻后的表达式匹配这种模式,那么整个字符串不匹配。大致意味着:只有当负面预测中的模式与不匹配时,才会满足此正则表达式的条件。

在这种情况下,如果.{10}不匹配,则字符串仅匹配 ,这意味着10个或更多字符,因此仅当前面的模式最多匹配9个字符时才匹配

正向前瞻相反,只有在前瞻中的条件匹配时才匹配。

为了好奇而把它放在这里,它比你需要的更复杂。

答案 1 :(得分:5)

尝试使用这个:

^123\\d{6}$

我将其更改为6,因为1,2和3应该仍然可以计为数字。

另外,我删除了+。有了它,它将匹配1个或更多\d s(因此无限数量的数字)。

答案 2 :(得分:0)

根据您在Doorknobs's answer下方的评论,您可以这样做:

int length = 9;
String prefix = "123"; // or whatever
String regex = "^" + prefix + "\\d{ " + (length - prefix.length()) + "}$";
if (input.matches(regex)) {
    // good
} else {
    // bad
}