【问题标题】:Quickly checking for telephone number format in input text using PHP?使用 PHP 快速检查输入文本中的电话号码格式?
【发布时间】:2010-07-24 17:04:35
【问题描述】:

从表单输入文本中快速检查电话号码格式的最有效方法是什么?

【问题讨论】:

    标签: php forms phone-number


    【解决方案1】:

    最简单的方法是去掉所有不是数字的东西,然后计算有多少个数字。这样您就不必对用户强制使用某种格式。至于您应该检查多少个号码...取决于您是否只检查本地号码、美国号码、国际号码等...但例如:

    $number="(123) 123-1234";
    if (strlen(preg_replace('~[^0-9]~','',$number)) == 10) {
      // 10 digit number (US area code plus phone number)
    }
    

    【讨论】:

    • 我正在写这篇文章。
    • 换句话说,强迫消费者在破折号和括号中书写纯粹是为了前端/消费者浪费时间!
    • 如果人们将他们的国家/地区代码输入爱尔兰,则 A + 有效,例如 +353 21 等
    • 我这样做的方式是我有一个单独的表单字段来指定预期的国家,然后在验证中我仍然删除所有非数字,但我检查的计数(例如“10”在上面的示例中)会有所不同,具体取决于选择的国家/地区。 IMO 这比试图解释所有漂浮在那里的格式要容易得多。实际上,到目前为止,我还没有找到一种 100% 的方法来准确验证来自任意位置的电话号码,即使它的格式正确,也没有和维护一个大的查找表!
    【解决方案2】:

    这真的取决于位置。对于区号的长度和整个号码的长度,各地有不同的约定。更宽容一些会更好。

    确保它是可选的“+”的正则表达式,后跟任意数量的数字将是最低限度。允许可选的破折号(“-”)或空格分隔数字组可能是一个不错的补充。另外,分机号码呢?

    事实上,最好只检查它是否包含一些数字。

    【讨论】:

      【解决方案3】:

      如果您只处理美国电话号码,您可能会遵循使用 三个文本框 = 一个用于区号 + 第二个用于交换 + 第三个用于号码的常见 UI 设计。这样,您可以测试每个数字只包含数字,并且输入了正确的数字位数。

      您还可以使用常见的技术测试每个按键的数字(忽略不是数字的按键),并在所需的数字后前进到下一个文本框已输入字符。

      第二个功能使用户更容易进行数据输入。

      使用单独的文本框还可以让用户更容易阅读他们的输入,比阅读他们连续正确输入了十位数字更容易。

      它还避免了您必须与在条目中使用不同标点符号的人打交道 - 用括号括住区号,在部分之间使用连字符或点。

      编辑:如果您决定只使用一个文本框,在this SO question.

      中使用 regex 有一些很好的方法

      【讨论】:

        【解决方案4】:

        如果您只处理美国电话号码,您可能会遵循使用三个文本框的常见 UI 设计 = 一个用于区号 + 第二个用于交换 + 第三个用于号码。这样,您可以测试每个数字是否仅包含数字,并且输入的数字位数是否正确。

        如果您要处理全球范围内的号码,这会出现问题,因为有些国家根本不使用区号,而且号码长度因国家/地区而异。

        订户号码可以短至 3 位,也可以长至 11 位或 12 位。使用的区号范围为 1 到 6 位。数据还需要与国家代码一起存储,以便有机会正确格式化以进行显示。

        【讨论】:

          猜你喜欢
          • 2022-11-30
          • 2013-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-05
          相关资源
          最近更新 更多