我试图以最有效的方式验证2种识别位置字符串的不同方法,但这两种方法都可能略有变化,并且在主字符串之前和之后都可以有一组字符。
有效值:
1号
14-36-085-17 W6
14-36-085-17-W6
14-36-085-17W6数字2
D 096 H 094A15以上任何一种都可以在主字符串之前有3位,在主字符串之后有2位(或不)。
100 14-36-085-17W6 00
200 D 096 H 094A15 00在这5个额外字符中,以下是规则:
因此,我认为这将分别是[1-2]0[0-9]和0[0-9]。还请注意,前3位数字依赖于最后2位数字,反之亦然。前3位只能在最后2位存在的情况下才能出现,而最后2位只能在前3位存在的情况下才能出现。
这给出了以下不应该匹配的无效字符串:
100 14-36-085-17W6
14-36-085-17W6 00这是我的两个主要数字的代码
function func(s)
{
var re = /(^\d{2}-\d{2}-\d{3}-\d{2}W\d$)|(^[A-D] [0-9]{3} [A-L] [0-9]{3}[A-P][0-9]{2}$)/;
return re.test( s );
}对于第一个验证,我只假设使用第3号大小写,因为我不知道如何使用空格、破折号或任何有效的东西。
发布于 2013-07-08 20:57:45
/^([1-2]0[0-9] )?[0-9]{2}-[0-9]{2}-[0-9]{3}-[0-9]{2}[- ]?W[0-9]( 0[0-9])?$/
第一个,和
/^([1-2]0[0-9] )?[A-D] [0-9] [0-9]{3} [A-L] [0-9]{3}[A-P][0-9]{2}( 0[0-9])?$/
为了第二个。我对regex不是很在行,所以我完全有可能在某个地方搞砸了。
发布于 2013-07-08 21:34:00
第一个数字类型可以与以下表达式匹配,这与您已经拥有的非常相似:
/d{2}-\d{2}-\d{3}-\d{2}[ -]?W\d/
^^^^^
added我正在使用字符集[- ]?,它可以选择匹配空格或连字符。
额外字符
与左派匹配:
/^[12]0\d /右半部分:
/ 0\d$/现在大家齐心协力:
/^(?:(?:[12]0\d )(?:\d{2}-\d{2}-\d{3}-\d{2}[ -]?W\d|[A-D] \d{3} [A-L] \d{3}[A-P]\d{2})(?: 0\d)|(?:\d{2}-\d{2}-\d{3}-\d{2}[ -]?W\d|[A-D] \d{3} [A-L] \d{3}[A-P]\d{2}))$/让我们把它弄干净一点:
var w1 = '\\d{2}-\\d{2}-\\d{3}-\\d{2}[ -]?W\\d',
w2 = '[A-D] \\d{3} [A-L] \\d{3}[A-P]\\d{2}',
words = '(?:' + w1 + '|' + w2 + ')',
prefix = '[12]0\\d ',
suffix = ' 0\\d',
re;
re = new RegExp('^(?:' + prefix + words + suffix + '|' + words + ')$');发布于 2013-07-08 22:11:39
它其实并没有那么糟糕(虽然肯定是一个很大的指标)。这应该包括模式和在开始或结束时可能的额外数字。
下面是您需要的模式:
var re = new RegExp("^([1-2]0\\d )?(\\d{2}-\\d{2}-\\d{3}-\\d{2}[\- ]?W\\d|[A-D] \\d{3} [A-L] \\d{3}[A-P]\\d{2})( 0\\d)?$");。。。或者,交替地:
var re = /^([1-2]0\d )?(\d{2}-\d{2}-\d{3}-\d{2}[\- ]?W\d|[A-D] \d{3} [A-L] \d{3}[A-P]\d{2})( 0\d)?$/您的其余代码应该可以正常工作。
编辑:基于我对“全部或无”的新理解,我更新了我的方法。。。我将根据两种由普通模式构建的正则表达式模式进行两次测试。
var sCorePattern = "(\\d{2}-\\d{2}-\\d{3}-\\d{2}[\- ]?W\\d|[A-D] \\d{3} [A-L] \\d{3}[A-P]\\d{2})";
var sSecondaryPattern = "[1-2]0\\d " + sCorePattern + " 0\\d";
var regCorePattern = new RegExp("^" + sCorePattern + "$");
var regSecondaryPattern = new RegExp("^" + sSecondaryPattern + "$");
if (regCorePattern.test(s) || regSecondaryPattern.test(s)) {
. . . do stuff . . .
}
else {
. . . do other stuff . . .
}对我来说,这是效率和重用的一个很好的结合,而不牺牲可读性。:)
https://stackoverflow.com/questions/17535575
复制相似问题