正则表达式:无价值匹配

时间:2012-05-23 10:17:55

标签: javascript regex

我创建了以下正则表达式,它匹配9个连续数字或14个连续数字。

^[0-9]{14}$|^[0-9]{9}$

如何使此正则表达式匹配9个连续数字或14个连续数字或空值?

基本上我想修改正则表达式,以便用户不需要为此字段输入值。或者换句话说,对此字段的验证是可选的。

2 个答案:

答案 0 :(得分:1)

怎么样:

if (value.length && !value.match(/^(?:[0-9]{14}|[0-9]{9})$/) {
    alert('invalid value');
}

如果string为空,它将通过;如果非空,则必须与正则表达式匹配。

正则表达式解决方案:

if (!value.match(/^(?:[0-9]{14}|[0-9]{9})?$/) {
    alert('invalid value');
}

答案 1 :(得分:1)

只需添加另一种选择。

^[0-9]{14}$|^[0-9]{9}$|^$

你可以将它重构为可选9,然后是另一个可选的5位数。

^([0-9]{9}([0-9]{5})?)?$

如果您不需要捕获组,则(?:...)的非捕获组会稍微快一些,但在这种情况下,差异可以忽略不计。