我正在用Java编写代码。
我正在尝试编写有效此规则的常规异常:
示例:
成功输入:
031, 0822, 097777777
输入失败:
06, 0622, 09666666, 084444.
我试图这样做,但不能正确。
^0([23894]\d{1}|\d{2}|\d{3}|\d{7})
谢谢大家,
射线。
答案 0 :(得分:2)
你搞砸了分组。尝试
^0[23894](?:\d|\d{2}|\d{3}|\d{7})$
理解原因:
^a(bc|d)$
匹配abc
或ac
而非abd
。
答案 1 :(得分:2)
事情并没有像你期望的那样去,因为你的正则表达式:
^0([23894]\d{1}|\d{2}|\d{3}|\d{7})
实际上意味着:
^0
(
[23894]\d{1} // b1
| // OR
\d{2} // b2
| // OR
\d{3} // b3
| // OR
\d{7} // b4
)
因此它在开始时与0
匹配,后跟b1
,b2
,b3
或b4
。
请改为尝试:
^0[23894](\d{1,3}|\d{7})$
答案 2 :(得分:1)
尝试将其更改为^0[23894](\d{1,3}|\d{7})$
(未经测试)。你写的是0,然后是2,3,8,9,4和另一个数字,或两位数,或三位数,或七位数。 {1,3}
指定重复范围为1-3次。
$
将表达式锚定在字符串的末尾;如果省略它,任何以该模式开头的字符串都将有效。
答案 3 :(得分:0)
这有两个问题:
您需要在结尾处使用“匹配结束字符串”符号以确保它与初始数字相匹配,然后是1/2/3/7其他数字
试试这个:
^ 0 [23894](\ d {1} | \ d {2} | \ d {3} | \ d {7})$
答案 4 :(得分:0)
试试这个:
^0([23894](1|2|3|7)*)