Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 英国电话号码格式符合Ofcom规范_Php_Phone Number - Fatal编程技术网

Php 英国电话号码格式符合Ofcom规范

Php 英国电话号码格式符合Ofcom规范,php,phone-number,Php,Phone Number,在StackOverflow中,有许多代码块以各种方式处理电话号码 大多数使用美国电话号码格式。也有一些可以用于一些英国数字,但并非所有都能产生正确的结果 以下代码对英国电话号码的格式如下: 以03、08和09开头的非地理数字格式为0xxx xxx xxxx和+44 xxx xxx xxxx xxxx 从07开始的手机号码格式为07xxx xxxxxx和+44 7xxx xxxxxx VoIP和其他05号码的格式为05xxx xxxxxx和+44 5xxx xxxxxx 以01和02开头的数字是

在StackOverflow中,有许多代码块以各种方式处理电话号码

大多数使用美国电话号码格式。也有一些可以用于一些英国数字,但并非所有都能产生正确的结果

以下代码对英国电话号码的格式如下:

以03、08和09开头的非地理数字格式为0xxx xxx xxxx和+44 xxx xxx xxxx xxxx

从07开始的手机号码格式为07xxx xxxxxx和+44 7xxx xxxxxx

VoIP和其他05号码的格式为05xxx xxxxxx和+44 5xxx xxxxxx

以01和02开头的数字是地理数字。它们有一个可变长度的区号。最新的Ofcom规范发布于www.Ofcom.org.uk/static/numbering/sabc.txt和www.Ofcom.org.uk/static/numbering/codelist.zip,以确保准确性

Ofcom将0113/0114/0115/0116/0117/0118和0121/0141列为3位区号,将015242、013873、015394/015395/015396、016973/016974、017683/017684/017687和019467列为5位区号。其余部分使用4位区号。0171和0181曾经是伦敦的3位区号,但现在不再使用

PHP代码很容易通过包含的简单表单输入进行测试。如果以其他方式使用代码,则可以丢弃该表单

输入首先去掉任何主要的国际访问代码和国家代码数字。在勾选无关字符(如空格和标点符号)以及任何主干数字(如有)后,将检查数字长度,以确保其长度为10位且在有效范围内。然后使用一组简单的规则对数字进行格式化

还包括对以“ext.234”或“x 234”形式追加的分机号码的基本支持

最终输出以国家和国际两种格式呈现

该代码不考虑非标准号码0800 1111和0845 4647。这些数字只有7位,这是不寻常的

<?php

// format UK telephone numbers using Ofcom specifications
// www.ofcom.org.uk/static/numbering/sabc.txt
// www.ofcom.org.uk/static/numbering/codelist.zip



// parse submitted form variables

if (ISSET($_POST['tel_form']) && ($_POST['tel_form'] == "1")) {

  if (ISSET($_POST['tel_num'])) {

    $tel_num = $_POST['tel_num'];

    $text = '    <p><b>Number as input:</b> ' . $tel_num . "</p>\n";



// remove leading +44, 00 44, 011 44 if present

    $leadingPattern = '/^(\+|00|011)?\ ?44(.*)/';
    if (preg_match($leadingPattern, $tel_num, $leadingMatches)) {
      $tel_num = $leadingMatches[2];
    }



// remove and separately store any extension number

    $extPattern = '/((ext|x)(.*))/';
    if (preg_match($extPattern, $tel_num, $extMatches)) {
      $extension = $extMatches[1];
    }
    $extReplacements = '';
    $tel_num = preg_replace($extPattern, $extReplacements, $tel_num);



// remove all non-digit characters and punctuation

    $nonDigitPattern = '([^0-9]+)';
    $nonDigitReplacements = '';
    $tel_num = preg_replace($nonDigitPattern, $nonDigitReplacements, $tel_num);
    $extension = preg_replace($nonDigitPattern, $nonDigitReplacements, $extension);



// remove leading 0 if present

    $leadingZeroPattern = '/^0+(.*)/';
    if (preg_match($leadingZeroPattern, $tel_num, $leadingZeroMatches)) {
      $tel_num = $leadingZeroMatches[1];
    }



// check remaining number length is 10 digits long

    if (strlen($tel_num) < '10') {
      $text .= '    <p>' . 'Telephone number too short.' . "</p>\n";
    }

    elseif (strlen($tel_num) > '10') {
      $text .= '    <p>' . 'Telephone number too long.' . "</p>\n";
    }



// format valid numbers

    else {


// format 3 digit area code for 0113/4/5/6/7/8, 0121, 0141

      $length3pattern = '/^(1(1[345678]|[24]1))([0-9]{3})(.*)/';
      if (preg_match($length3pattern, $tel_num, $matches)) {
        $formatted_number = $matches[1] . ' ' . $matches[3] . ' ' . $matches[4];
      }



// format 5 digit area code for 015242, 013873, 015394/5/6, 016973/4, 017683/4/7, 019467

      $length5pattern = '/^(1(3873|5242|539[456]|697[34]|768[347]|9467))(.*)/';
      if (preg_match($length5pattern, $tel_num, $matches)) {
        $formatted_number = $matches[1] . ' ' . $matches[3];
      }



// format non-geographic numbers

      $NGNpattern = '/^([389][0-9]{2})([0-9]{3})(.*)/';
      if (preg_match($NGNpattern, $tel_num, $matches)) {
        $formatted_number = $matches[1] . ' ' . $matches[2] . ' ' . $matches[3];
      }



// format all other numbers

      if (!ISSET($formatted_number)) {
        $pattern = '/^([1257][0-9]{3})(.*)/';
        if (preg_match($pattern, $tel_num, $matches)) {
          $formatted_number = $matches[1] . ' ' . $matches[2];
        }


// else warn that number isn't valid

        else {
          $text .= "    <p>Telephone number probably not valid.</p>\n";
        }
      }



// store number in international and national formats

    }

    if (ISSET($formatted_number)) {

      $int_formatted_number = '+44 ' . $formatted_number;
      $text .= '    <p><b>International format:</b> ' . $int_formatted_number . "</p>\n";

      $codePattern = '/^([12][^\ ]+)(\ .*)/';
      if (preg_match($codePattern, $formatted_number, $matches)) {
        $nat_formatted_number = '(0' . $matches[1] . ') ' . $matches[2];
      }
      else {
        $nat_formatted_number = '0' . $formatted_number;
      }
      $text .= '    <p><b>National format:</b> ' . $nat_formatted_number . "</p>\n";

      if ((ISSET($extension)) && (!empty($extension))) {
        $text .= '    <p><b>Extension:</b> ' . $extension . "</p>\n";
      }

    }



// show start message for first time form use

  }
}
else {
  $text = "    <p><b>Please start by entering a UK telephone number.</b></p>\n";
}



// show HTML page with form for input
?>
<!DOCTYPE html>

<html>

  <head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>UK telephone number formatter</title>

  </head>

<body>

<?php
if (ISSET($text)) {
  print $text;
}
?>

    <hr>

<?php
if ((ISSET($tel_num)) && (!empty($tel_num))) {
  $tel_num = '0' . $tel_num;
}
?>
    <form action="telnum.php" name="input" method="post">
      <p><b>Enter a UK telephone number to format:</b> <input type="text" name="tel_num" value="<?php print $tel_num; ?>" />
      <input type="hidden" name="tel_form" value="1" />
      <input type="submit" value="submit" /></p>
    </form>

  </body>

</html>