2012-03-08 49 views
0

我不是正则表达式那么好,我需要一些帮助,我坚持...正则表达式和分隔符在javascript

这是我得到:

编辑:现在是工作的罚款,取一起来看看...

http://jsfiddle.net/oscarj24/qrPHk/1/

这就是我需要:

// First 4 numbers must be always 9908 
// After the 4 first numbers must be a : as delimiter 
// After the delimiter... 
// - the allowed values are just numbers from 0-9 
// - the min. length is 3 
// - the max. length is infinite 
// RESULT: 
// - Valid: 9908:123 or 9908:123456... 
// - Invalid: 9908:12 or 9908:xyz 

谢谢。

回答

9
var regex = /^9908:\d{3,}$/; 

将完全匹配9908:后跟3位或更多位。

+0

谢谢您的回答!我删除了以前的评论,因为迈克唐诺克斯(从下一篇文章)使一切更清楚,我的错误是不使用速记JavaScript正则表达式,但现在它工作正常:-) – 2012-03-08 17:44:43

5

Alexander Corwin的答案应该可以正常工作。我只是想对他的回应添加一些解释。

由于方括号表示它们中的任何字符都是有效的,因此您不需要围绕9908方括号。所以你的代码实际上试图做的是匹配一个9,0或者8.当你想要指定一个文字字符串时,你可以像他那样写出它们。

但是,忽略这一点,我看到的第二个问题是,您使用了错误的量词语法来指定9908段的长度。您需要使用花括号来指定特定的长度范围,如{3,}在其代码中所做的。圆括号仅用于创建序列组和反向引用。

此外,当您不创建RegExp对象时,应该使用以正斜杠开始并结束的简写JavaScript正则表达式语法。您也可以在结束斜杠之后添加修饰符,这将更改正则表达式的执行方式。例如:

var re = /stackoverflow/g; 

'g'表示它可以匹配多个主题字符串。还有,你在这里可以找到更多信息其他几个修饰符:http://www.regular-expressions.info/javascript.html

你的固定电话应该是这样的:

var regex = /^9908:\d{3,}$/; 
+0

好的解释,现在我得到它的工作,非常感谢你许多! – 2012-03-08 17:40:54

+0

此答案已被添加到[Stack Overflow Regular Expression FAQ](http://stackoverflow.com/a/22944075/2736496),在“修改器”下。 – aliteralmind 2014-04-10 00:54:40

1

使用此:

var match = /^9908:[0-9]{3,}$/.test("9908:123"); 
​alert(match);​ 
+0

不错的尝试,但亚历山大Corwin的回答第一:-)另外,最好使用'\ d'而不是'[0-9]',但也谢谢你的答案。 – 2012-03-08 17:53:33