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