【问题标题】:Regex - Validate Mobile Phone with Optional Country Code正则表达式 - 使用可选国家代码验证手机
【发布时间】:2013-11-18 06:58:28
【问题描述】:

我目前正在学习正则表达式。我真的不知道/不明白如何编写具有 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})$/

【问题讨论】:

标签: javascript regex


【解决方案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 工具,那就更好了。

【讨论】:

    【解决方案2】:

    使用? 使组成为可选组,这意味着“前面的零个或一个”:

    /^([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})?$
    

    【讨论】:

    • 您好,感谢@vivin-paliath 的评论!我改变了我的正则表达式,但它仍然不起作用。我希望 (+90) 部分和 /#### 部分在这个^\(\+([0-9]{2})\)?([0-9]{3}-)?([0-9]{3})\-([0-9]{4})(\/[0-9]{4})?$ 中都是可选的。但我想我犯了一个错误,你能告诉我我失败的部分吗?
    【解决方案3】:

    使用? 表示可选原子。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2021-11-23
      • 2012-10-03
      相关资源
      最近更新 更多