1

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

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

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

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

4

2 回答 2

1

怎么样:

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

如果字符串为空,则通过;如果非空,它必须匹配正则表达式。

仅正则表达式解决方案:

if (!value.match(/^(?:[0-9]{14}|[0-9]{9})?$/) {
    alert('invalid value');
}
于 2012-05-23T10:20:43.900 回答
1

只需添加另一种选择。

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

您也可以将其重构为可选的 9,后跟另一个可选的 5 位数字。

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

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

于 2012-05-23T10:45:06.107 回答