首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何匹配长度为4或6而不是5的字符串?

问如何匹配长度为4或6而不是5的字符串?
EN

Stack Overflow用户
提问于 2014-03-30 01:37:35
回答 2查看 114关注 0票数 2

在javascript正则表达式中:/^[0-9]{4}$/将匹配长度为4的数字字符串。/^[0-9]{4,6}$/将匹配长度为4、5或6的数字字符串。我如何匹配长度为4或6而不是5的字符串?当然,这只是一个例子,这两个长度可以是任何长度。如果我想匹配两个以上的长度怎么办?

EN

回答 2

Stack Overflow用户

发布于 2014-03-30 01:38:27

您可以使用:

代码语言:javascript
复制
/^[0-9]{4}([0-9]{2})?$/

这将匹配4个数字或6个数字,但不匹配5个。

票数 7
EN

Stack Overflow用户

发布于 2014-03-30 01:43:28

虽然您肯定可以为此构建正则表达式,但其形式

代码语言:javascript
复制
/^([0-9]{4}|[0-9]{6})$/

或

代码语言:javascript
复制
/^([0-9]{2}){2,3}$/

(或者像anubhava建议的那样)

我建议您最好将此特定情况分成两个问题:有效字符和长度。

代码语言:javascript
复制
(value.length == 4 || value.length == 6) && /^[0-9]*$/.test( value )

这使得扩展到任意数量的有效长度变得更容易,并且扩展有效字符集也变得很容易。如果你有很多有效的长度,并且你的目标是IE9+,你可以使用一个数组:

代码语言:javascript
复制
var validLengths = [4,6,etc];
var validChars = /^[0-9]*$/;
if( validLengths.indexOf( value.length ) !== -1 && validChars.test( value ) )

要使用该方法以IE8或更低版本为目标,您可以使用对象,也可以创建自己的数组查找函数(这非常简单)。

您甚至可以使用lookahead在正则表达式中应用这种拆分逻辑,但它并不美观(而且效率较低):

代码语言:javascript
复制
/^(?=[0-9]*$)(.{4}|.{6})$/
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22734452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档