海外手机号码格式校验(PHP版)

版权声明:本文为博主原创文章,拒绝相同的垃圾博文。 https://blog.csdn.net/tsummerb/article/details/86438766

应项目需求,需要满足海外用户也可方便注册成为公司会员。调研之后,决定注册界面应该包括以下两部分

一定是 2 个输入框。

  • 国家码。推荐使用下拉框
  • 手机号码。根据选中的国家码,做有效性校验。

<1>国家码,目前采用的国际通用的ISO标准,具体世界各国的国家码对应国家的SQL如下

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `sms_country`
-- ----------------------------
DROP TABLE IF EXISTS `sms_country`;
CREATE TABLE `sms_country` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `iso` char(2) NOT NULL,
  `iso3` char(3) DEFAULT NULL,
  `name` varchar(80) NOT NULL,
  `name_zh` varchar(80) DEFAULT NULL,
  `nicename` varchar(80) NOT NULL,
  `numcode` smallint(6) DEFAULT NULL,
  `phonecode` int(5) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=240 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of sms_country
-- ----------------------------
INSERT INTO `sms_country` VALUES ('1', 'AF', 'AFG', 'AFGHANISTAN', '阿富汗', 'Afghanistan', '4', '93'),
('2', 'AL', 'ALB', 'ALBANIA', '阿尔巴尼亚', 'Albania', '8', '355'),
('3', 'DZ', 'DZA', 'ALGERIA', '阿尔及利亚', 'Algeria', '12', '213'),
('4', 'AS', 'ASM', 'AMERICAN SAMOA', '美属萨摩亚', 'American Samoa', '16', '1684'),
('5', 'AD', 'AND', 'ANDORRA', '安道尔', 'Andorra', '20', '376'),
('6', 'AO', 'AGO', 'ANGOLA', '安哥拉', 'Angola', '24', '244'),
('7', 'AI', 'AIA', 'ANGUILLA', '安圭拉岛', 'Anguilla', '660', '1264'),
('8', 'AQ', null, 'ANTARCTICA', '南极洲', 'Antarctica', null, '0'),
('9', 'AG', 'ATG', 'ANTIGUA AND BARBUDA', '安提瓜岛和巴布达', 'Antigua and Barbuda', '28', '1268'),
('10', 'AR', 'ARG', 'ARGENTINA', '阿根廷', 'Argentina', '32', '54'),
('11', 'AM', 'ARM', 'ARMENIA', '亚美尼亚', 'Armenia', '51', '374'),
('12', 'AW', 'ABW', 'ARUBA', '阿鲁巴岛', 'Aruba', '533', '297'),
('13', 'AU', 'AUS', 'AUSTRALIA', '澳大利亚', 'Australia', '36', '61'),
('14', 'AT', 'AUT', 'AUSTRIA', '奥地利', 'Austria', '40', '43'),
('15', 'AZ', 'AZE', 'AZERBAIJAN', '阿塞拜疆', 'Azerbaijan', '31', '994'),
('16', 'BS', 'BHS', 'BAHAMAS', '巴哈马群岛', 'Bahamas', '44', '1242'),
('17', 'BH', 'BHR', 'BAHRAIN', '巴林', 'Bahrain', '48', '973'),
('18', 'BD', 'BGD', 'BANGLADESH', '孟加拉国', 'Bangladesh', '50', '880'),
('19', 'BB', 'BRB', 'BARBADOS', '巴巴多斯', 'Barbados', '52', '1246'),
('20', 'BY', 'BLR', 'BELARUS', '白俄罗斯', 'Belarus', '112', '375'),
('21', 'BE', 'BEL', 'BELGIUM', '比利时', 'Belgium', '56', '32'),
('22', 'BZ', 'BLZ', 'BELIZE', '伯利兹', 'Belize', '84', '501'),
('23', 'BJ', 'BEN', 'BENIN', '贝宁', 'Benin', '204', '229'),
('24', 'BM', 'BMU', 'BERMUDA', '百慕大', 'Bermuda', '60', '1441'),
('25', 'BT', 'BTN', 'BHUTAN', '不丹', 'Bhutan', '64', '975'),
('26', 'BO', 'BOL', 'BOLIVIA', '玻利维亚', 'Bolivia', '68', '591'),
('27', 'BA', 'BIH', 'BOSNIA AND HERZEGOVINA', '波斯尼亚和黑塞哥维那', 'Bosnia and Herzegovina', '70', '387'),
('28', 'BW', 'BWA', 'BOTSWANA', '博茨瓦纳', 'Botswana', '72', '267'),
('29', 'BV', null, 'BOUVET ISLAND', '布维岛', 'Bouvet Island', null, '0'),
('30', 'BR', 'BRA', 'BRAZIL', '巴西', 'Brazil', '76', '55'),
('31', 'IO', null, 'BRITISH INDIAN OCEAN TERRITORY', '英属印度洋领地', 'British Indian Ocean Territory', null, '246'),
('32', 'BN', 'BRN', 'BRUNEI DARUSSALAM', '文莱达鲁萨兰国', 'Brunei Darussalam', '96', '673'),
('33', 'BG', 'BGR', 'BULGARIA', '保加利亚', 'Bulgaria', '100', '359'),
('34', 'BF', 'BFA', 'BURKINA FASO', '布吉纳法索', 'Burkina Faso', '854', '226'),
('35', 'BI', 'BDI', 'BURUNDI', '布隆迪', 'Burundi', '108', '257'),
('36', 'KH', 'KHM', 'CAMBODIA', '柬埔寨', 'Cambodia', '116', '855'),
('37', 'CM', 'CMR', 'CAMEROON', '喀麦隆', 'Cameroon', '120', '237'),
('38', 'CA', 'CAN', 'CANADA', '加拿大', 'Canada', '124', '1'),
('39', 'CV', 'CPV', 'CAPE VERDE', '佛得角', 'Cape Verde', '132', '238'),
('40', 'KY', 'CYM', 'CAYMAN ISLANDS', '开曼群岛', 'Cayman Islands', '136', '1345'),
('41', 'CF', 'CAF', 'CENTRAL AFRICAN REPUBLIC', '中非共和国', 'Central African Republic', '140', '236'),
('42', 'TD', 'TCD', 'CHAD', '乍得', 'Chad', '148', '235'),
('43', 'CL', 'CHL', 'CHILE', '智利', 'Chile', '152', '56'),
('44', 'CN', 'CHN', 'CHINA', '中国', 'China', '156', '86'),
('45', 'CX', null, 'CHRISTMAS ISLAND', '圣诞岛', 'Christmas Island', null, '61'),
('46', 'CC', null, 'COCOS (KEELING) ISLANDS', 'COCOS(KEELING)岛', 'Cocos (Keeling) Islands', null, '672'),
('47', 'CO', 'COL', 'COLOMBIA', '哥伦比亚', 'Colombia', '170', '57'),
('48', 'KM', 'COM', 'COMOROS', '科摩罗', 'Comoros', '174', '269'),
('49', 'CG', 'COG', 'CONGO', '刚果', 'Congo', '178', '242'),
('50', 'CD', 'COD', 'CONGO, THE DEMOCRATIC REPUBLIC OF THE', '刚果民主共和国的', 'Congo, the Democratic Republic of the', '180', '242'),
('51', 'CK', 'COK', 'COOK ISLANDS', '库克群岛', 'Cook Islands', '184', '682'),
('52', 'CR', 'CRI', 'COSTA RICA', '哥斯达黎加', 'Costa Rica', '188', '506'),
('53', 'CI', 'CIV', 'COTE D\'IVOIRE', '科特迪瓦', 'Cote D\'Ivoire', '384', '225'),
('54', 'HR', 'HRV', 'CROATIA', '克罗地亚', 'Croatia', '191', '385'),
('55', 'CU', 'CUB', 'CUBA', '古巴', 'Cuba', '192', '53'),
('56', 'CY', 'CYP', 'CYPRUS', '塞浦路斯', 'Cyprus', '196', '357'),
('57', 'CZ', 'CZE', 'CZECH REPUBLIC', '捷克共和国', 'Czech Republic', '203', '420'),
('58', 'DK', 'DNK', 'DENMARK', '丹麦', 'Denmark', '208', '45'),
('59', 'DJ', 'DJI', 'DJIBOUTI', '吉布提', 'Djibouti', '262', '253'),
('60', 'DM', 'DMA', 'DOMINICA', '多米尼加', 'Dominica', '212', '1767'),
('61', 'DO', 'DOM', 'DOMINICAN REPUBLIC', '多米尼加共和国', 'Dominican Republic', '214', '1809'),
('62', 'EC', 'ECU', 'ECUADOR', '厄瓜多尔', 'Ecuador', '218', '593'),
('63', 'EG', 'EGY', 'EGYPT', '埃及', 'Egypt', '818', '20'),
('64', 'SV', 'SLV', 'EL SALVADOR', '萨尔瓦多', 'El Salvador', '222', '503'),
('65', 'GQ', 'GNQ', 'EQUATORIAL GUINEA', '赤道几内亚', 'Equatorial Guinea', '226', '240'),
('66', 'ER', 'ERI', 'ERITREA', '厄立特里亚', 'Eritrea', '232', '291'),
('67', 'EE', 'EST', 'ESTONIA', '爱沙尼亚', 'Estonia', '233', '372'),
('68', 'ET', 'ETH', 'ETHIOPIA', '埃塞俄比亚', 'Ethiopia', '231', '251'),
('69', 'FK', 'FLK', 'FALKLAND ISLANDS (MALVINAS)', '福克兰群岛(马尔维纳斯)', 'Falkland Islands (Malvinas)', '238', '500'),
('70', 'FO', 'FRO', 'FAROE ISLANDS', '法罗群岛', 'Faroe Islands', '234', '298'),
('71', 'FJ', 'FJI', 'FIJI', '斐济', 'Fiji', '242', '679'),
('72', 'FI', 'FIN', 'FINLAND', '芬兰', 'Finland', '246', '358'),
('73', 'FR', 'FRA', 'FRANCE', '法国', 'France', '250', '33'),
('74', 'GF', 'GUF', 'FRENCH GUIANA', '法属圭亚那', 'French Guiana', '254', '594'),
('75', 'PF', 'PYF', 'FRENCH POLYNESIA', '法属波利尼西亚', 'French Polynesia', '258', '689'),
('76', 'TF', null, 'FRENCH SOUTHERN TERRITORIES', '法国南部地区', 'French Southern Territories', null, '0'),
('77', 'GA', 'GAB', 'GABON', '加蓬', 'Gabon', '266', '241'),
('78', 'GM', 'GMB', 'GAMBIA', '冈比亚', 'Gambia', '270', '220'),
('79', 'GE', 'GEO', 'GEORGIA', '乔治亚州', 'Georgia', '268', '995'),
('80', 'DE', 'DEU', 'GERMANY', '德国', 'Germany', '276', '49'),
('81', 'GH', 'GHA', 'GHANA', '加纳', 'Ghana', '288', '233'),
('82', 'GI', 'GIB', 'GIBRALTAR', '直布罗陀', 'Gibraltar', '292', '350'),
('83', 'GR', 'GRC', 'GREECE', '希腊', 'Greece', '300', '30'),
('84', 'GL', 'GRL', 'GREENLAND', '格陵兰岛', 'Greenland', '304', '299'),
('85', 'GD', 'GRD', 'GRENADA', '格林纳达', 'Grenada', '308', '1473'),
('86', 'GP', 'GLP', 'GUADELOUPE', '瓜德罗普岛', 'Guadeloupe', '312', '590'),
('87', 'GU', 'GUM', 'GUAM', '关岛', 'Guam', '316', '1671'),
('88', 'GT', 'GTM', 'GUATEMALA', '危地马拉', 'Guatemala', '320', '502'),
('89', 'GN', 'GIN', 'GUINEA', '几内亚', 'Guinea', '324', '224'),
('90', 'GW', 'GNB', 'GUINEA-BISSAU', '几内亚比绍', 'Guinea-Bissau', '624', '245'),
('91', 'GY', 'GUY', 'GUYANA', '圭亚那', 'Guyana', '328', '592'),
('92', 'HT', 'HTI', 'HAITI', '海地', 'Haiti', '332', '509'),
('93', 'HM', null, 'HEARD ISLAND AND MCDONALD ISLANDS', '听到岛和麦当劳的岛屿', 'Heard Island and Mcdonald Islands', null, '0'),
('94', 'VA', 'VAT', 'HOLY SEE (VATICAN CITY STATE)', '教廷(梵蒂冈)', 'Holy See (Vatican City State)', '336', '39'),
('95', 'HN', 'HND', 'HONDURAS', '洪都拉斯', 'Honduras', '340', '504'),
('96', 'HK', 'HKG', 'HONG KONG', '中国香港', 'Hong Kong', '344', '852'),
('97', 'HU', 'HUN', 'HUNGARY', '匈牙利', 'Hungary', '348', '36'),
('98', 'IS', 'ISL', 'ICELAND', '冰岛', 'Iceland', '352', '354'),
('99', 'IN', 'IND', 'INDIA', '印度', 'India', '356', '91'),
('100', 'ID', 'IDN', 'INDONESIA', '印尼', 'Indonesia', '360', '62'),
('101', 'IR', 'IRN', 'IRAN, ISLAMIC REPUBLIC OF', '伊朗伊斯兰共和国', 'Iran, Islamic Republic of', '364', '98'),
('102', 'IQ', 'IRQ', 'IRAQ', '伊拉克', 'Iraq', '368', '964'),
('103', 'IE', 'IRL', 'IRELAND', '爱尔兰', 'Ireland', '372', '353'),
('104', 'IL', 'ISR', 'ISRAEL', '以色列', 'Israel', '376', '972'),
('105', 'IT', 'ITA', 'ITALY', '意大利', 'Italy', '380', '39'),
('106', 'JM', 'JAM', 'JAMAICA', '牙买加', 'Jamaica', '388', '1876'),
('107', 'JP', 'JPN', 'JAPAN', '日本', 'Japan', '392', '81'),
('108', 'JO', 'JOR', 'JORDAN', '约旦', 'Jordan', '400', '962'),
('109', 'KZ', 'KAZ', 'KAZAKHSTAN', '哈萨克斯坦', 'Kazakhstan', '398', '7'),
('110', 'KE', 'KEN', 'KENYA', '肯尼亚', 'Kenya', '404', '254'),
('111', 'KI', 'KIR', 'KIRIBATI', '基里巴斯', 'Kiribati', '296', '686'),
('112', 'KP', 'PRK', 'KOREA, DEMOCRATIC PEOPLE\'S REPUBLIC OF', '朝鲜民主主义人民共和国', 'Korea, Democratic People\'s Republic of', '408', '850'),
('113', 'KR', 'KOR', 'KOREA, REPUBLIC OF', '朝鲜共和国', 'Korea, Republic of', '410', '82'),
('114', 'KW', 'KWT', 'KUWAIT', '科威特', 'Kuwait', '414', '965'),
('115', 'KG', 'KGZ', 'KYRGYZSTAN', '吉尔吉斯斯坦', 'Kyrgyzstan', '417', '996'),
('116', 'LA', 'LAO', 'LAO PEOPLE\'S DEMOCRATIC REPUBLIC', '老挝人民民主共和国', 'Lao People\'s Democratic Republic', '418', '856'),
('117', 'LV', 'LVA', 'LATVIA', '拉脱维亚', 'Latvia', '428', '371'),
('118', 'LB', 'LBN', 'LEBANON', '黎巴嫩', 'Lebanon', '422', '961'),
('119', 'LS', 'LSO', 'LESOTHO', '莱索托', 'Lesotho', '426', '266'),
('120', 'LR', 'LBR', 'LIBERIA', '利比里亚', 'Liberia', '430', '231'),
('121', 'LY', 'LBY', 'LIBYAN ARAB JAMAHIRIYA', '阿拉伯利比亚民众国', 'Libyan Arab Jamahiriya', '434', '218'),
('122', 'LI', 'LIE', 'LIECHTENSTEIN', '列支敦斯登', 'Liechtenstein', '438', '423'),
('123', 'LT', 'LTU', 'LITHUANIA', '立陶宛', 'Lithuania', '440', '370'),
('124', 'LU', 'LUX', 'LUXEMBOURG', '卢森堡', 'Luxembourg', '442', '352'),
('125', 'MO', 'MAC', 'MACAO', '澳门', 'Macao', '446', '853'),
('126', 'MK', 'MKD', 'MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF', '前南斯拉夫马其顿共和国', 'Macedonia, the Former Yugoslav Republic of', '807', '389'),
('127', 'MG', 'MDG', 'MADAGASCAR', '马达加斯加', 'Madagascar', '450', '261'),
('128', 'MW', 'MWI', 'MALAWI', '马拉维', 'Malawi', '454', '265'),
('129', 'MY', 'MYS', 'MALAYSIA', '马来西亚', 'Malaysia', '458', '60'),
('130', 'MV', 'MDV', 'MALDIVES', '马尔代夫', 'Maldives', '462', '960'),
('131', 'ML', 'MLI', 'MALI', '马里', 'Mali', '466', '223'),
('132', 'MT', 'MLT', 'MALTA', '马耳他', 'Malta', '470', '356'),
('133', 'MH', 'MHL', 'MARSHALL ISLANDS', '马绍尔群岛', 'Marshall Islands', '584', '692'),
('134', 'MQ', 'MTQ', 'MARTINIQUE', '马提尼克岛', 'Martinique', '474', '596'),
('135', 'MR', 'MRT', 'MAURITANIA', '毛利塔尼亚', 'Mauritania', '478', '222'),
('136', 'MU', 'MUS', 'MAURITIUS', '毛里求斯', 'Mauritius', '480', '230'),
('137', 'YT', null, 'MAYOTTE', '马约特岛', 'Mayotte', null, '269'),
('138', 'MX', 'MEX', 'MEXICO', '墨西哥', 'Mexico', '484', '52'),
('139', 'FM', 'FSM', 'MICRONESIA, FEDERATED STATES OF', '密克罗尼西亚联邦', 'Micronesia, Federated States of', '583', '691'),
('140', 'MD', 'MDA', 'MOLDOVA, REPUBLIC OF', '摩尔多瓦共和国', 'Moldova, Republic of', '498', '373'),
('141', 'MC', 'MCO', 'MONACO', '摩纳哥', 'Monaco', '492', '377'),
('142', 'MN', 'MNG', 'MONGOLIA', '蒙古', 'Mongolia', '496', '976'),
('143', 'MS', 'MSR', 'MONTSERRAT', '蒙特塞拉特', 'Montserrat', '500', '1664'),
('144', 'MA', 'MAR', 'MOROCCO', '摩洛哥', 'Morocco', '504', '212'),
('145', 'MZ', 'MOZ', 'MOZAMBIQUE', 'MOZAMBIQUE', 'Mozambique', '508', '258'),
('146', 'MM', 'MMR', 'MYANMAR', '缅甸', 'Myanmar', '104', '95'),
('147', 'NA', 'NAM', 'NAMIBIA', '纳米比亚', 'Namibia', '516', '264'),
('148', 'NR', 'NRU', 'NAURU', '瑙鲁', 'Nauru', '520', '674'),
('149', 'NP', 'NPL', 'NEPAL', '尼泊尔', 'Nepal', '524', '977'),
('150', 'NL', 'NLD', 'NETHERLANDS', '荷兰', 'Netherlands', '528', '31'),
('151', 'AN', 'ANT', 'NETHERLANDS ANTILLES', '荷属安的列斯群岛', 'Netherlands Antilles', '530', '599'),
('152', 'NC', 'NCL', 'NEW CALEDONIA', '新喀里多尼亚', 'New Caledonia', '540', '687'),
('153', 'NZ', 'NZL', 'NEW ZEALAND', '新西兰', 'New Zealand', '554', '64'),
('154', 'NI', 'NIC', 'NICARAGUA', '尼加拉瓜', 'Nicaragua', '558', '505'),
('155', 'NE', 'NER', 'NIGER', '尼日尔', 'Niger', '562', '227'),
('156', 'NG', 'NGA', 'NIGERIA', '尼日利亚', 'Nigeria', '566', '234'),
('157', 'NU', 'NIU', 'NIUE', '纽埃岛', 'Niue', '570', '683'),
('158', 'NF', 'NFK', 'NORFOLK ISLAND', '诺福克岛', 'Norfolk Island', '574', '672'),
('159', 'MP', 'MNP', 'NORTHERN MARIANA ISLANDS', '北马里亚纳群岛', 'Northern Mariana Islands', '580', '1670'),
('160', 'NO', 'NOR', 'NORWAY', '挪威', 'Norway', '578', '47'),
('161', 'OM', 'OMN', 'OMAN', '阿曼', 'Oman', '512', '968'),
('162', 'PK', 'PAK', 'PAKISTAN', '巴基斯坦', 'Pakistan', '586', '92'),
('163', 'PW', 'PLW', 'PALAU', '帕劳', 'Palau', '585', '680'),
('164', 'PS', null, 'PALESTINIAN TERRITORY, OCCUPIED', '巴勒斯坦的领土,占领', 'Palestinian Territory, Occupied', null, '970'),
('165', 'PA', 'PAN', 'PANAMA', '巴拿马', 'Panama', '591', '507'),
('166', 'PG', 'PNG', 'PAPUA NEW GUINEA', '巴布新几内亚', 'Papua New Guinea', '598', '675'),
('167', 'PY', 'PRY', 'PARAGUAY', '巴拉圭', 'Paraguay', '600', '595'),
('168', 'PE', 'PER', 'PERU', '秘鲁', 'Peru', '604', '51'),
('169', 'PH', 'PHL', 'PHILIPPINES', '菲律宾', 'Philippines', '608', '63'),
('170', 'PN', 'PCN', 'PITCAIRN', '皮特克恩', 'Pitcairn', '612', '0'),
('171', 'PL', 'POL', 'POLAND', '波兰', 'Poland', '616', '48'),
('172', 'PT', 'PRT', 'PORTUGAL', '葡萄牙', 'Portugal', '620', '351'),
('173', 'PR', 'PRI', 'PUERTO RICO', '波多黎各', 'Puerto Rico', '630', '1787'),
('174', 'QA', 'QAT', 'QATAR', '卡塔尔', 'Qatar', '634', '974'),
('175', 'RE', 'REU', 'REUNION', '团聚', 'Reunion', '638', '262'),
('176', 'RO', 'ROM', 'ROMANIA', '罗马尼亚', 'Romania', '642', '40'),
('177', 'RU', 'RUS', 'RUSSIAN FEDERATION', '俄罗斯联邦', 'Russian Federation', '643', '70'),
('178', 'RW', 'RWA', 'RWANDA', '卢旺达', 'Rwanda', '646', '250'),
('179', 'SH', 'SHN', 'SAINT HELENA', '圣赫勒拿', 'Saint Helena', '654', '290'),
('180', 'KN', 'KNA', 'SAINT KITTS AND NEVIS', '圣基茨和尼维斯', 'Saint Kitts and Nevis', '659', '1869'),
('181', 'LC', 'LCA', 'SAINT LUCIA', '圣卢西亚岛', 'Saint Lucia', '662', '1758'),
('182', 'PM', 'SPM', 'SAINT PIERRE AND MIQUELON', '圣皮埃尔和MIQUELON', 'Saint Pierre and Miquelon', '666', '508'),
('183', 'VC', 'VCT', 'SAINT VINCENT AND THE GRENADINES', '圣文森特和格林纳丁斯', 'Saint Vincent and the Grenadines', '670', '1784'),
('184', 'WS', 'WSM', 'SAMOA', '萨摩亚', 'Samoa', '882', '684'),
('185', 'SM', 'SMR', 'SAN MARINO', '圣马力诺', 'San Marino', '674', '378'),
('186', 'ST', 'STP', 'SAO TOME AND PRINCIPE', '圣多美和王子', 'Sao Tome and Principe', '678', '239'),
('187', 'SA', 'SAU', 'SAUDI ARABIA', '沙特阿拉伯', 'Saudi Arabia', '682', '966'),
('188', 'SN', 'SEN', 'SENEGAL', '塞内加尔', 'Senegal', '686', '221'),
('189', 'CS', null, 'SERBIA AND MONTENEGRO', '塞尔维亚和黑山', 'Serbia and Montenegro', null, '381'),
('190', 'SC', 'SYC', 'SEYCHELLES', '塞舌尔', 'Seychelles', '690', '248'),
('191', 'SL', 'SLE', 'SIERRA LEONE', '塞拉利昂', 'Sierra Leone', '694', '232'),
('192', 'SG', 'SGP', 'SINGAPORE', '新加坡', 'Singapore', '702', '65'),
('193', 'SK', 'SVK', 'SLOVAKIA', '斯洛伐克', 'Slovakia', '703', '421'),
('194', 'SI', 'SVN', 'SLOVENIA', '斯洛文尼亚', 'Slovenia', '705', '386'),
('195', 'SB', 'SLB', 'SOLOMON ISLANDS', '所罗门群岛', 'Solomon Islands', '90', '677'),
('196', 'SO', 'SOM', 'SOMALIA', '索马里', 'Somalia', '706', '252'),
('197', 'ZA', 'ZAF', 'SOUTH AFRICA', '南非', 'South Africa', '710', '27'),
('198', 'GS', null, 'SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS', '南乔治亚岛和南桑威奇群岛', 'South Georgia and the South Sandwich Islands', null, '0'),
('199', 'ES', 'ESP', 'SPAIN', '西班牙', 'Spain', '724', '34'),
('200', 'LK', 'LKA', 'SRI LANKA', '斯里兰卡', 'Sri Lanka', '144', '94'),
('201', 'SD', 'SDN', 'SUDAN', '苏丹', 'Sudan', '736', '249'),
('202', 'SR', 'SUR', 'SURINAME', '苏里南', 'Suriname', '740', '597'),
('203', 'SJ', 'SJM', 'SVALBARD AND JAN MAYEN', '斯瓦尔巴群岛和扬马延岛', 'Svalbard and Jan Mayen', '744', '47'),
('204', 'SZ', 'SWZ', 'SWAZILAND', '斯威士兰', 'Swaziland', '748', '268'),
('205', 'SE', 'SWE', 'SWEDEN', '瑞典', 'Sweden', '752', '46'),
('206', 'CH', 'CHE', 'SWITZERLAND', '瑞士', 'Switzerland', '756', '41'),
('207', 'SY', 'SYR', 'SYRIAN ARAB REPUBLIC', '阿拉伯叙利亚共和国', 'Syrian Arab Republic', '760', '963'),
('208', 'TW', 'TWN', 'TAIWAN, PROVINCE OF CHINA', '中国台湾地区', 'Taiwan, Province of China', '158', '886'),
('209', 'TJ', 'TJK', 'TAJIKISTAN', '塔吉克斯坦', 'Tajikistan', '762', '992'),
('210', 'TZ', 'TZA', 'TANZANIA, UNITED REPUBLIC OF', '坦桑尼亚联合共和国', 'Tanzania, United Republic of', '834', '255'),
('211', 'TH', 'THA', 'THAILAND', '泰国', 'Thailand', '764', '66'),
('212', 'TL', null, 'TIMOR-LESTE', '东帝汶', 'Timor-Leste', null, '670'),
('213', 'TG', 'TGO', 'TOGO', '多哥', 'Togo', '768', '228'),
('214', 'TK', 'TKL', 'TOKELAU', '托克劳', 'Tokelau', '772', '690'),
('215', 'TO', 'TON', 'TONGA', '汤加', 'Tonga', '776', '676'),
('216', 'TT', 'TTO', 'TRINIDAD AND TOBAGO', '特立尼达和多巴哥', 'Trinidad and Tobago', '780', '1868'),
('217', 'TN', 'TUN', 'TUNISIA', '突尼斯', 'Tunisia', '788', '216'),
('218', 'TR', 'TUR', 'TURKEY', '土耳其', 'Turkey', '792', '90'),
('219', 'TM', 'TKM', 'TURKMENISTAN', '土库曼斯坦', 'Turkmenistan', '795', '7370'),
('220', 'TC', 'TCA', 'TURKS AND CAICOS ISLANDS', '特克斯和凯科斯群岛', 'Turks and Caicos Islands', '796', '1649'),
('221', 'TV', 'TUV', 'TUVALU', '图瓦卢', 'Tuvalu', '798', '688'),
('222', 'UG', 'UGA', 'UGANDA', '乌干达', 'Uganda', '800', '256'),
('223', 'UA', 'UKR', 'UKRAINE', '乌克兰', 'Ukraine', '804', '380'),
('224', 'AE', 'ARE', 'UNITED ARAB EMIRATES', '阿拉伯联合酋长国', 'United Arab Emirates', '784', '971'),
('225', 'GB', 'GBR', 'UNITED KINGDOM', '联合王国', 'United Kingdom', '826', '44'),
('226', 'US', 'USA', 'UNITED STATES', '美国', 'United States', '840', '1'),
('227', 'UM', null, 'UNITED STATES MINOR OUTLYING ISLANDS', '美国小离岛', 'United States Minor Outlying Islands', null, '1'),
('228', 'UY', 'URY', 'URUGUAY', '乌拉圭', 'Uruguay', '858', '598'),
('229', 'UZ', 'UZB', 'UZBEKISTAN', '乌兹别克斯坦', 'Uzbekistan', '860', '998'),
('230', 'VU', 'VUT', 'VANUATU', '瓦努阿图', 'Vanuatu', '548', '678'),
('231', 'VE', 'VEN', 'VENEZUELA', '委内瑞拉', 'Venezuela', '862', '58'),
('232', 'VN', 'VNM', 'VIET NAM', '越南', 'Viet Nam', '704', '84'),
('233', 'VG', 'VGB', 'VIRGIN ISLANDS, BRITISH', '维尔京群岛,英国', 'Virgin Islands, British', '92', '1284'),
('234', 'VI', 'VIR', 'VIRGIN ISLANDS, U.S.', '维尔京群岛,美国', 'Virgin Islands, U.s.', '850', '1340'),
('235', 'WF', 'WLF', 'WALLIS AND FUTUNA', '瓦利斯群岛和富图纳群岛', 'Wallis and Futuna', '876', '681'),
('236', 'EH', 'ESH', 'WESTERN SAHARA', '西撒哈拉', 'Western Sahara', '732', '212'),
('237', 'YE', 'YEM', 'YEMEN', '也门', 'Yemen', '887', '967'),
('238', 'ZM', 'ZMB', 'ZAMBIA', '赞比亚', 'Zambia', '894', '260'),
('239', 'ZW', 'ZWE', 'ZIMBABWE', '津巴布韦', 'Zimbabwe', '716', '263')

根据 ITU-T 制定的 E.164 标准,最长 15 位。 其中 1-3 位是国家码。根据 Google i18n,德国已经分配了超过这个长度的手机号码。数据库设计时,推荐存储手机号的字段长度为varchar 的长度为 50。稍微冗余一点,以防万一。过度优化是万恶之源。

<2>手机号码,试图用一个正则来校验,是不可能做到的。手机号码的有效性验证规则,可参考 Google 开源的 libphonenumber

github地址:https://github.com/giggsey/libphonenumber-for-php

里面有针对不同框架的sdk(laravel,yii,ci),可以根据项目选择合适的SDK。具体的安装方式以及校验方法此处不做过多解释,详细请看SDK的doc目录下的具体事例,此处只提项目用到的校验手机号格式的核心方法isValidNumber(),具体的封装方法如下:

/**
 * 校验海外手机号码格式
 * @param  {String} $number      [手机号]
 * @param  {String} $countryCode [手机区号]
 * @return {[bool]}             
 */
public function extract_phone_number( $number, $countryCode = '86' ) {
    $fullPhone = '+' . $countryCode . $number;
    try {
        /** @var \libphonenumber\PhoneNumberUtil $phoneNumberUtil */
        $phoneNumberUtil = PhoneNumberUtil::getInstance();
        $phoneNumberObject = $phoneNumberUtil->parse($fullPhone, null); //If the number is passed in an international format (e.g. +44 117 496 0123), then the region code is not needed, and can be null
        if ($phoneNumberUtil->isValidNumber($phoneNumberObject)) {
            return TRUE;
        } else {
            return FALSE;
        }
    } catch (\Exception $e) {
        return FALSE;
    }
}

猜你喜欢

转载自blog.csdn.net/tsummerb/article/details/86438766