1

我目前正在学习正则表达式。我真的不知道/不明白如何编写具有 2 个条件的表达式。还是我必须为每种情况编写 2 个正则表达式?

我在做的是,

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

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

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

格式:(+##)###-###-####/#### 扩展名是可选的,它可以不带国家代码开始。

有什么方法可以在单个表达式中执行,还是我必须在我的 javascript 文件中为每个案例输入 if 条件?

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

4

3 回答 3

1

就像其他人说?的那样,匹配正在进行的令牌的 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 工具,那就更好了。

于 2013-11-06T20:44:08.217 回答
0

使用?which 表示“前面的零个或一个”使组成为可选的:

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

?是修饰语,如*(零个或多个前述)和+(一个或多个前述)。

这使得这两个组都是可选的,这意味着包含所有三个组成部分(国家代码、号码、分机)的号码、包含任何一个可选组成部分(号码 + 分机、国家代码 + 号码)的号码,以及没有任何可选组成部分的号码,将被正则表达式接受。

编辑

您在评论中的正则表达式中的错误是 the ?is after the escaped ),这意味着零或一个实际)不是一个组。你需要的是:

^(\(\+[0-9]{2}\))?([0-9]{3}-)?([0-9]{3})\-([0-9]{4})(\/[0-9]{4})?$
于 2013-11-06T20:40:24.503 回答
0

用于?指示可选原子。

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

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

于 2013-11-06T20:41:00.940 回答