正则表达式 - 使用可选的国家/地区代码验证移动电话

时间:2013-11-06 20:34:44

标签: javascript regex

我正在研究正则表达式。我真的不知道/理解如何编写具有2个条件的表达式。或者我是否必须为每个案例写2个正则表达式?

我在做什么,

我的html字段中有一个txtMobile字段

<label for="txtMobile">Mobile:*</label>
<input id="txtMobile" type="text" name="txtMobile" size="22" maxlength="22">

在我的javascript文件中,我正在尝试使用以下规则创建表达式

格式:(+ ##)### - ### - #### / ####扩展名是可选的,可以在没有国家/地区代码的情况下启动。

在单个表达式中有什么办法可以做,或者我必须在我的javascript文件中输入每个案例的条件吗?

以下是我做的/^([0-9]{3})\-([0-9]{3})\-([0-9]{4})\/([0-9]{4})$/

3 个答案:

答案 0 :(得分:0)

使用?表示组是可选的,这意味着“零或前一个”:

/^([0-9]{3}-)?([0-9]{3})\-([0-9]{4})(\/[0-9]{4})?$/

?是一个修饰符,如*(前面的零个或多个)和+(前面的一个或多个)。

这使得两个组都是可选的,这意味着包含所有三个组件的数字(国家代码,号码,分机号),带有可选组件的数字(号码+分机号,国家代码+号码)和没有可选组件的号码正则表达式将接受组件。

修改

您在评论中的正则表达式中的错误是?位于转义 )之后,这意味着零或一个实际的)和小组的。你需要的是:

^(\(\+[0-9]{2}\))?([0-9]{3}-)?([0-9]{3})\-([0-9]{4})(\/[0-9]{4})?$

答案 1 :(得分:0)

使用?表示可选原子。

/^(\(+[0-9]{2}\))?...

这里我使前面的组可选,并注意括号如何将几个原子组合成一个原子。字面括号被转义。这是一个正则表达式的开头,它允许使用您的格式后面的可选国家/地区代码。允许可选的扩展留给读者作为练习。 :)

答案 2 :(得分:0)

与其他人一样,?匹配前进令牌的0或1。

/^(\(\+\d{1,3}\))?(\d{3}-){2}\d{4}(\/\d{3,4})?$/

匹配

999-999-9999
(+1)999-999-9999
(+11)999-999-9999
(+111)999-999-9999
999-999-9999/000
(+1)999-999-9999/000
(+11)999-999-9999/000
(+111)999-999-9999/000
999-999-9999/0000
(+1)999-999-9999/0000
(+11)999-999-9999/0000
(+111)999-999-9999/0000

我想使用此工具:http://gskinner.com/RegExr/

它实现了Flash的RegEx版本,它与Javascript不完全相同。但它足够接近大多数工作。如果其他人可以推荐JS RegEx工具,那就更好了。