【发布时间】:2022-01-13 07:33:32
【问题描述】:
export const validUKPhone = /^(\+)?(44)?(\s*\d){9,11}$/;
我目前有以下电话号码的正则表达式,它正在尝试验证号码的长度。
现在有趣的是,模式的开头有 3 个可选字符。 +44(可能)。
我的问题是如何编写我的正则表达式来考虑这个组,并且只计算数字“主体”的长度。如果 +44 存在,则长度模式将为 {12,14} 否则为 {9,11}
例如以下测试失败。
expect(regex.test('+440798444')).toBeFalsy();
expect(regex.test('+440798444457')).toBeTruthy();
(由于 +44,当前为 10 个字符,但返回 true)
【问题讨论】:
-
0798444是 7 位数字,您至少需要 9 位。 -
我想你想要:
^(?:.{3})?\+?(44)?\d{9,11}$ -
试试
/^(?:\+?44\s*\d|(?!44))(?:\s*\d){9,11}$/ -
@WiktorStribiżew - 这很接近 - 因为它继续满足您在原始正则表达式中发现的空格要求,但未达到预期(regex.test('+44079251345672')).toBeFalsy( );大概与 + 字符有关
-
您说如果号码以
44开头,则可以有额外的12、13 或14 位数字。为什么+44079251345672是假的?079251345672长度为 12 个字符。
标签: javascript regex