0

表示字符串的正则表达式必须大小为 9 或 11 个字符。它不可能是其他任何东西。当我做 ((\d{9})|(\d{11})$ 时,它可以工作 9 个或更多字符。当我有 200 个字符时它是有效的,那就是不是我想要的……

4

3 回答 3

2

你也需要锚定开始。尝试这样的事情:

^((\d{9})|(\d{11}))$

此外,如果它可以是任何 9 或 11 个字符,而不仅仅是数字,请使用:

^((.{9})|(.{11}))$
于 2013-09-30T21:56:58.323 回答
1

您还需要一个起始锚 ( ^) ,否则它将仅匹配字符串末尾的 9 或 11 位数字:

^(\d{9}|\d{11})$ 

或等效地:

^\d{9}(\d\d)?$ 

如果您只想匹配任何字符的 9 或 11,请使用:

^.{9}(..)?$ 
于 2013-09-30T21:57:00.903 回答
1
((\d{9})|(\d{11})$

...不是有效的正则表达式,因为它缺少括号。

这是您可能打算在问题中写的更正的正则表达式:

((\d{9})|(\d{11}))$

现在,关于您的问题,您希望将输入的位数限制为 9 或 11。以下是如何做到这一点:

^((\d{9})|(\d{11}))$

我们正在做的是定义表达式的开始^和结束$,以便正则表达式引擎知道如何解析数据。

如果您没有定义开始和结束,则表达式默认为“贪婪”,这就是它匹配超过 9 位或 11 位数字的原因。由于您只定义了一个结束,它匹配所有出现的开始,即 9 或 11 的每个组合。

正如已经指出的,如果你想匹配字符,你需要替换一个不同的表达式:

^((.{9})|(.{11}))$

如果你只想匹配数字、字母和下划线,你可以使用这个:

^(([A-Za-z_0-9]{9})|([A-Za-z_0-9]{11}))$

但是,无论如何,表达式可以更容易地定义为:

^.{9,11}$

您可以根据需要替换[A-Za-z_0-9]或替换。\d

()基本匹配正则表达式不需要您在原始表达式周围的附加内容。如果您需要捕获组进行替换,则它们是必需的。

于 2013-09-30T22:03:11.857 回答