4

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

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

但它无法检查字符串的长度。它仅验证这些字符串的长度为 9 并以 123 开头。但如果我通过字符串 1234567891 它也会验证它。但是我该怎么做呢?

4

3 回答 3

6

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

^123\\d{9}$

或者

^123\\d{6}$

具体取决于你需要什么。

您还可以使用另一种更复杂和通用的方法,即负前瞻:

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

解释:

this :(?!.{10,})是一个否定的前瞻?=将是一个肯定的前瞻),这意味着如果前瞻之后的表达式匹配这个模式,那么整个字符串不匹配。大致意思是:仅当否定预读中的模式不匹配时,才满足此正则表达式的条件

在这种情况下,字符串仅在不匹配时才匹配.{10},即 10 个或更多字符,因此仅在前面的模式匹配最多 9 个字符时才匹配。

积极的前瞻则相反,只有在前瞻中的标准匹配时才匹配。

只是出于好奇而将其放在这里,它比您需要的要复杂得多。

于 2013-02-19T13:05:42.090 回答
5

尝试使用这个:

^123\\d{6}$

我将其更改为6因为 1、2 和 3 可能仍应算作数字。

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

于 2013-02-19T12:58:59.643 回答
0

根据您在Doorknobs 答案下方的评论,您可以执行以下操作:

int length = 9;
String prefix = "123"; // or whatever
String regex = "^" + prefix + "\\d{ " + (length - prefix.length()) + "}$";
if (input.matches(regex)) {
    // good
} else {
    // bad
}
于 2013-02-19T13:12:24.313 回答