2017-03-31 65 views
1

我想测试一个用户字符串是否“迄今为止”,因为它可能不是一个有效的整体,但它是一个有效的子集。如何获得正则表达式匹配的有效部分

我有一个正则表达式,例如^ [0-9] {4} - [0-9] {4} - [0-9] {4} - [0-9] $ 这样“1234-1234 -5678-5678“有效

”1234-12“或甚至”1“不匹配模式,但它是一个有效格式的有效子集,换句话说,输入到目前为止是确定的。

有没有一个很好的方法做到这一点,而没有制造许多正则表达式,它的星期五。

+0

所以1234年至1212年是否有效? – funcoding

+0

考虑例如''AAAAAc'.match(/ A + B | C /)'。根据你的说法,“AAAAA”是否为“有效子集”? – georg

回答

2

不知道如果我深知你的问题,但我认为你想有这样的事情:

^([0-9]{4}-){1,3}[0-9]{1,4}$ 

Working demo

这将匹配组的4位,并且可以具有从1到4位

最后一组enter image description here

您也可以缩短与您正则表达式:

^(\d{4}-){1,3}\d{1,4}$ 
+0

我喜欢这一个......但要覆盖所有的基地,你可以将它改为“{0,3}” – sln

+0

还有一个问题是,它不会匹配'1234-',在那里有一个晃动的短划线,除非它被改为'{0,4}'总而言之,这是最快的方法。 – sln

+0

嗯,我给了你一票,希望op接受这个...... – sln

0

您可能可以使用一个最终的正则表达式来验证您当前拥有的表单,并且可以使用用户输入的动态正则表达式对每个子集都有效。

我的想法是有([0-9] {1,4} - )+

+0

,但这将使“1-2”有效,它不是 – Arthur

0

对于你的情况,这将检查作为一个类型:

/^(\d(\d(\d(\d(-(\d(\d(\d(\d(-(\d(\d(\d(\d(-(\d)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?$/ 
0

此正则表达式,你键入将匹配键键,虽然它有点麻烦。

^([0-9]{1,4}|[0-9]{4}-[0-9]{0,4}|[0-9]{4}-[0-9]{4}-[0-9]{0,4}|[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{0,4})$ 

Here is a live example

相关问题