在javascript正则表达式中:/^[0-9]{4}$/将匹配长度为4的数字字符串。/^[0-9]{4,6}$/将匹配长度为4、5或6的数字字符串。我如何匹配长度为4或6而不是5的字符串?当然,这只是一个例子,这两个长度可以是任何长度。如果我想匹配两个以上的长度怎么办?
发布于 2014-03-30 01:38:27
您可以使用:
/^[0-9]{4}([0-9]{2})?$/这将匹配4个数字或6个数字,但不匹配5个。
发布于 2014-03-30 01:43:28
虽然您肯定可以为此构建正则表达式,但其形式
/^([0-9]{4}|[0-9]{6})$/或
/^([0-9]{2}){2,3}$/(或者像anubhava建议的那样)
我建议您最好将此特定情况分成两个问题:有效字符和长度。
(value.length == 4 || value.length == 6) && /^[0-9]*$/.test( value )这使得扩展到任意数量的有效长度变得更容易,并且扩展有效字符集也变得很容易。如果你有很多有效的长度,并且你的目标是IE9+,你可以使用一个数组:
var validLengths = [4,6,etc];
var validChars = /^[0-9]*$/;
if( validLengths.indexOf( value.length ) !== -1 && validChars.test( value ) )要使用该方法以IE8或更低版本为目标,您可以使用对象,也可以创建自己的数组查找函数(这非常简单)。
您甚至可以使用lookahead在正则表达式中应用这种拆分逻辑,但它并不美观(而且效率较低):
/^(?=[0-9]*$)(.{4}|.{6})$/https://stackoverflow.com/questions/22734452
复制相似问题