在通过搜索和搜索了解了我所能做的之后,我找不到美国唯一的方法。所以,这是我设计的:
首先,要允许任何输入格式,请使用preg_replace 删除所有非数字字符。 [用户可以使用他们想要的任何连字符或斜杠,但它们对我没有用。]
$mobile = preg_replace('/\D/', '', $trimmed['mobile']);
只需使用纯数字字符串,即可消除任何前导 1s — 这会处理用户包含前导 1 或区号以 1 开头的任何情况。 [如果有效,这应该总是给我留下一个10 数字字符串。]
$mobiletrim = ltrim($mobile, '1');
接下来,正则表达式检查修剪后的电话号码是否恰好是 10 数字长,并且不是以 0 或 1 开头。
if (preg_match ('/^[2-9]\d{9}$/', $mobiletrim) || empty($trimmed['mobile'])) {
$mp = TRUE;
if (!empty($trimmed['mobile'])) { $mobiletrim = "1" . $mobiletrim; }
} else {
$profile_errors[] = "Please enter a valid U.S. phone number.";
}
if ($mp) { //Store Phone Number in db }
您可以在上面看到的最后一步是在将有效号码存储在数据库中之前添加前导 1,前提是用户没有提交空的电话字段,如果他们没有,他们会这样做'不想存储他们的号码。
从技术上讲,这将验证所有 NANP 号码。将其从 NANP 缩小到美国的唯一方法是通过解析当前美国区号列表来验证是否使用了美国区号。