4

あなたはおそらくこれが何百万回も前に尋ねられたと思っているでしょうが、私の質問は少し違うと思います。電話番号検証のほとんどの要求は、ユーザー入力の検証に使用されます。私のシナリオでは、米国の携帯電話への着信を検証し、それらが別の国から発信されているのか、米国内から発信されているのかを判断しようとしています。

私の主な問題は、私が英国に拠点を置いており、米国の電話番号の経験がないことです。ダイヤル方法などの形式(国際電話と国内電話の両方)について読んだことがありますが、電話番号の表示が異なることが心配です。受信者の電話で、さまざまな形式で。

これが私がやろうとしていることの仕様です。

  • あなたが米国に拠点を置き、携帯電話で電話を受けていると想像してみてください
  • 通話が米国からのものか他の国からのものかを判断する
  • 英国では、通話は国内または国際形式で表示される可能性があり、米国の番号かどうかを判断できる必要があります
  • 国際電話は、携帯電話に0044または+44の形式で表示できると思います(英国から米国に電話をかけている場合)
  • 米国内からの通話の場合、有効な電話番号ですか?
  • 数字以外の文字をすべて取り除き、国別フォーマットに再フォーマットします。たとえば、英国の番号01530 123123は、01530123123に再フォーマットされます。
  • 数字以外の文字をすべて取り除き、国際形式に再フォーマットします。たとえば、英国の番号01530 123123は、00441530123123に再フォーマットされます。

PHPでコードを記述し、正規表現を避けようとしています。substr()を使用して数値の一部を分解できると思います。

これをどうやって行うか、コードスニペットや電話番号の例について何か考えはありますか?アメリカの誰かが電話番号のフォーマットなどについて教えてくれることを本当に望んでいます。

4

7 に答える 7

3

+1を探すだけだと言っている人は、電話番号をあまり扱っていません。1国コードは、米国だけでなく北米の多くの地域に適用されます。したがって、実際に発生する必要があるのは、北米番号計画および北米番号計画の市外局番のリストにリストされているテーブルの周りのロジックです。

これは、米国を拠点としない+1で始まる番号を持ついくつかの「例外的な」国の短いリストです。

バミューダ:

  • 1995年以降:+1 441(xxx)xxxx

プエルトリコ:

  • 2001年以降:+1 787xxxxxxxまたは+1939xxx xxxx(島全体のオーバーレイ)

アメリカ領バージン諸島:

  • 1997年以降:+1 340 xxx xxxx

北マリアナ諸島:

  • 1997年以降:+1 670 xxx xxxx

グアム:

  • 1997年以降:+1 671 xxx xxxx

アメリカ領サモア:

  • 2004年10月2日以降:+1 684 xxx xxxx

セントマーチン:

  • NANPに参加した後:+1 721 xxx xxxx(日付は未定)
于 2010-12-14T03:43:07.270 に答える
2

これはそれをします

<?php
/**
  * function isUsPhone
  * {arg} $num string the number
  * {returns} bool
**/
function isUsPhone($num){ 
// for au use this 
// foreach(array('+', '0011') as $c){
foreach(array('+', '00') as $c){
 if(substr($num,0,strlen($c)+1) == $c.'1'){
  foreach(
   array(
    205, 251, 256, 334, 659, 938, 907, 250, 480, 520, 602, 623, 928, 327, 479, 501, 870, 209, 213, 310, 323, 341, 369, 408, 415, 424, 442, 510, 530, 559, 562, 619, 626, 627, 628, 650, 657, 661, 669, 707, 714, 747, 760, 764, 805, 818, 831, 858, 909, 916, 925, 935, 949, 951 , 303, 719, 720, 970 , 203, 475, 860, 959, 302, 202, 239, 305, 321, 352, 386, 407, 561, 689, 727, 754, 772, 786, 813, 850, 863, 904, 941, 954 , 229, 404, 470, 478, 678, 706, 762, 770, 912 , 808, 208, 217, 224, 309, 312, 331, 447, 464, 618, 630, 708, 730, 773, 779, 815, 847, 872, 219, 260, 317, 574, 765, 812, 319, 515, 563, 641, 712 , 316, 620, 785, 913, 270, 364, 502, 606, 859, 225, 318, 337, 504, 985, 207, 227, 240, 301, 410, 443, 667, 339, 351, 413, 508, 617, 774, 781, 857, 978 , 231, 248, 269, 313, 517, 586, 616, 679, 734, 810, 906, 947, 989 , 218, 320, 507, 612, 651, 763, 952, 228, 601, 662, 769, 314, 417, 557, 573, 636, 660, 816, 975, 406, 308, 402, 531, 702, 775, 603, 201, 551, 609, 732, 848, 856, 862, 908, 973 , 505, 575, 212, 315, 347, 516, 518, 585, 607, 631, 646, 716, 718, 845, 914, 917, 929 , 252, 336, 704, 828, 910, 919, 980, 984 , 701, 216, 234, 283, 330, 380, 419, 440, 513, 567, 614, 740, 937, 405, 539, 580, 918, 458, 503, 541, 971, 215, 267, 272, 412, 445, 484, 570, 582, 610, 717, 724, 814, 835, 878 , 401, 803, 843, 864, 605, 423, 615, 731, 865, 901, 931, 210, 214, 254, 281, 325, 361, 409, 430, 432, 469, 512, 682, 713, 737, 806, 817, 830, 832, 903, 915, 936, 940, 956, 972, 979 , 385, 435, 801, 802, 276, 434, 540, 571, 703, 757, 804 , 206, 253, 360, 425, 509, 564, 304, 681, 262, 274, 414, 534, 608, 715, 920, 307
   ) as $a
  ){
   if(substr($num,strlen($c)+1,3) === (string) $a){
    echo "\n".substr($num,strlen($c)+1,3)."\n";
    return true;
    }
  }
  }
}
return false;
}
var_dump(isUsPhone('+18003343423'));
?>

「私たち」は私たちですこれは無料、無料、または特別な番号です

あなたが英国の番号を持っているので、ウィキペディアに アクセスしてください、私たちは常にプレフィックスを持っています(そうでなければ、呼び出し自体は不可能です)

于 2010-12-09T10:31:51.190 に答える
1

私の知る限り、番号が「国境を越えて」いる場合は常に国コードのプレフィックスが付いているため、米国の番号を識別するために+1または001を確認するのはかなり安全です。

ただし、米国の番号で電話がかかってきたからといって、米国からの電話であるとは限りません。それは、世界中のどこにでもある携帯電話である可能性があります。

于 2010-12-04T18:15:47.753 に答える
1

+で始まり、その後に1が続かない場合、または011で始まる場合は、「国際的」です。他のそれは「全国的」です。

ただし、ここでの「国内」とは、アメリカ合衆国ではなく北米を意味します。あなたの場合、違いが重要かもしれません。それが北米ではなく米国であるかどうかを本当に知る必要がある場合は、地域コードを確認する必要があります。北米では、電話番号は+1(AAA)NNN-NNNNのように構成されます。ここで、 AAAは市外局番です。この市外局番は、それがどこから来ているかを教えてくれます。

市外局番のリストは、 http://en.wikipedia.org/wiki/List_of_North_American_Numbering_Plan_area_codesで入手できます。市外局番が割り当てられると、常にこの割り当てになりますが、将来、一部の市外局番が追加される可能性があることに注意してください。

編集:市外局番800、822、833、844、855、866、877、880から882、888は、フリーダイヤル(またはフリーダイヤルの将来の拡張用に予約済み)を意味し、北米よりも正確に特定することはできません。これらの番号についてあなたが確信している唯一のことは、北米では無料です。

于 2010-12-11T00:01:46.363 に答える
0

ローカルの米国の番号は市外局番で始まり、555や800のように特別な意味を持つものもあり、常に合計の桁数は同じです。800CALLNOWのように、電話ユーザーがアルファテキストとして入力するものもあり、その形式の国際電話は受けられません。プロジェクトに関しては、認定および登録されたモバイルネットワークオペレーティングソフトウェアエンジニアであり、デバイスのコードの標準モジュールを使用するか、通話に関する統計を収集する必要があります。通常、フィルタリングのように、質問する詳細についての知識は必要ありません。そのモジュールで実行し、必要なのはパラメーターとしての変数への出力だけです。作業を要求する米国の組織は、遭遇する可能性のある特定の番号形式の仕様と、作業が米国外で実行できると仮定した場合の国内電気通信規制当局からの文書を提供する必要があります。彼らが詳細を提供していないか、尋ねられた場合にそれを行うことができない場合、プロジェクトのその部分は満足に完了することができません。

于 2010-12-12T16:39:04.103 に答える
0

米国の番号を指定すると、いくつかの電話番号形式を提供するこのAPIを試すことができます。これから、それが米国の番号であるかどうかを知ることができます。結果をJSONで返しますhttps://www.mashape.com/parsify/format#endpoint-Phone-Number

于 2013-02-28T19:06:45.710 に答える
0

Googleのlibphonenumberライブラリの使用を開始しました。それはあなたが複数の国際的なフォーマットに従ってあなたの電話番号をフォーマットすることを可能にします。

ここにPHPポートがあります: https ://github.com/davideme/libphonenumber-for-PHP

于 2014-04-10T20:51:40.693 に答える