【问题标题】:Regex for numbers with spaces, plus sign, hyphen and brackets带有空格、加号、连字符和括号的数字的正则表达式
【发布时间】:2013-11-18 18:12:28
【问题描述】:

我正在寻找电话号码的正则表达式,但似乎找不到我需要的。

要求

  • 以加号(可选)开头,例如。 +442021234
  • 允许括号(可选),例如。 (+44)2021234
  • 允许任意长度的数字
  • 允许数字之间有空格,例如。 (+44) 202 1234
  • 允许使用连字符,例如。 (+44)-202-1234

基本上希望允许用户输入带有常见特殊字符的电话号码,并将使用 JavaScript onBlur 去除这些字符。非常感谢任何帮助。

【问题讨论】:

  • 到目前为止你尝试过什么?这是一长串要求(不包括剥离字符);您有任何代码我们可以帮助调试吗?或者您要求我们为您编写代码?
  • 为什么不先去掉字符,然后使用^\d{9}$ 验证您有 9 位正则表达式?这样,当您显示数字时,您可以根据需要重新格式化,使其保持一致。
  • 由于网站的设置方式,我无法在验证之前删除值,因为这是自动触发的。所以我想允许用户输入加号、连字符、括号和空格,并在验证后用 JS 将它们去掉。电话号码分为 3 个单独的输入字段(国家代码、区号和电话号码)。这是一个大型系统,所以我有很多限制 - 一个是我必须在所有三个框中使用相同的正则表达式,所以我不想限制用户可以输入多少个数字。感谢大家的帮助!

标签: regex phone-number


【解决方案1】:

你可以试试这个正则表达式:

/(?:\(?\+\d{2}\)?\s*)?\d+(?:[ -]*\d+)*$/

【讨论】:

  • 这似乎涵盖了我正在寻找的大部分内容,但我需要它不允许字母,理想情况下只有数字开头的加号。这可能吗?
  • 这将不允许字母和+ 仅在开始时是可选的。你不需要那个吗?
  • 谢谢正确。我已经知道需要一个单独的正则表达式来获取特殊字符列表,以便在执行时不会触发验证。带有加号、连字符和括号的正则表达式。
  • 那么我应该取出匹配的+( )吗?
  • 我想回答最初的问题 - 是的。但是,如果您还可以编写一个只允许 '+'、'-' 和 '()' 的新正则表达式,那就太好了!
【解决方案2】:

考虑以下正则表达式...

^\(?\+?[\d\(\-\s\)]+$

祝你好运!

【讨论】:

    【解决方案3】:

    不匹配格式,既然您打算无论如何都去除字符,为什么不先去除字符,然后验证您是否有一个符合您要求的长度的数字?

    // strip all non-numeric values
    var number = number.replace(/[^\d]/g, '');
    
    // validate we have a number of a specific length
    if (number.length == 9) {
        // valid number =]
    
    }
    

    如果您有额外的“数字”规则,例如 必须44 开头,那么您可以在去除字符后使用正则表达式:

    if (number.match(/44\d{7}/)) {
        // we have a (+44)* number
    
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多