2014-08-29 53 views
1

我正在写或至少尝试一个正则表达式来验证Javascript中的委内瑞拉电话号码。我做了一个基本的表达:/^0[0-9]{10}$/允许例如像数字:基于状态前缀验证电话号码的复杂正则表达式

02129876543 (VALID) 
02139876543 (INVALID) 
02149876543 (INVALID) 

但由于前缀值213214是无效的第二和3TH无效。我有(来自维基百科)有效前缀列表,这是一个:

248, 281, 282, 283, 235, 247, 278, 243, 244, 245, 246, 273, 278, 235, 285, 286, 288, 
241, 242, 243, 245, 249, 258, 287, 212, 259, 268, 269, 237, 235, 238, 246, 247, 251, 
252, 253, 271, 273, 274, 275, 212, 234, 239, 287, 291, 292, 295, 255, 256, 257, 293, 
294, 276, 277, 271, 272, 212, 251, 253, 254, 261, 262, 263, 264, 265, 266, 267, 271, 
275, 260, 270, 412, 414, 424, 416, 426 

如何建立这些前缀检查有效性的正则表达式?一个有效的数字应该开始总是与零(0)其次是上面的任何前缀,后面是七位数,可以给我一些帮助吗?

回答

3

你的正则表达式将是一个漫长的,包括所有这些前缀,但你可以在此交替模式建立的东西:

/^0(?:212|24[123589]|252|294)[0-9]{7}$/ 
+0

所以,如果我得到它,我应该添加任何正则表达式的前缀?对? – ReynierPM 2014-08-29 14:26:07

+1

是的,这是正确的。查看缩短长度的更新正则表达式。 – anubhava 2014-08-29 14:28:21

+0

虽然答案是正确的,但好像你已经忘记了一些前缀,比如'281','271','426' ......这是正常的吗? – pomeh 2014-08-29 14:29:39

1

建设上@ anubhava的答案,你会建立它的每个。总的正则表达式应该是这样..

^0(?:2(?:12|3[45789]|[45][1-9]|6[0-9]|7[0-8]|8[1235678]|9[1-5])|4(?:1[246]|2[46]))\d{7}$ 

Live Demo

1

以及完整的正则表达式将是

^0(?:2(?:12|4[1-9]|5[1-9]|6[0-9]|7[0-8]|8[1-35-8]|9[1-5]|3[45789])|4(?:1[246]|2[46]))\d{7}$ 

DEMO

+0

我会离开upvote,但'4 [0-9]'应该是'4 [1-9]' – hwnd 2014-08-29 15:03:09

+0

谢谢,更新... – 2014-08-29 15:04:44