从表单输入文本中快速检查电话号码格式的最有效方法是什么?
4 回答
最简单的方法是去掉所有不是数字的东西,然后计算有多少位数字。这样您就不必对用户强制使用某种格式。至于您应该检查多少号码...取决于您是否仅检查本地号码、美国号码、国际号码等...但例如:
$number="(123) 123-1234";
if (strlen(preg_replace('~[^0-9]~','',$number)) == 10) {
// 10 digit number (US area code plus phone number)
}
这真的取决于位置。对于区号的长度和整个号码的长度,各地有不同的约定。更宽容一些会更好。
确保它是可选的“+”的正则表达式,后跟任意数量的数字将是最低限度。允许可选的破折号(“-”)或空格分隔数字组可能是一个不错的补充。另外,分机号码呢?
事实上,最好只检查它是否包含一些数字。
如果您只处理美国电话号码,您可能会遵循使用三个文本框的常见 UI 设计 = 一个用于区号 + 第二个用于交换 + 第三个用于号码。这样,您可以测试每个数字只包含数字,并且输入了正确的数字位数。
如果您正在处理全球范围内的号码,这会失败,因为有些国家根本不使用区号,而且号码长度因国家/地区而异。
订户号码可以短至 3 位,也可以长至 11 位或 12 位。使用的区号范围为 1 到 6 位。数据还需要与国家代码一起存储,以便有机会正确格式化以进行显示。
如果您只处理美国电话号码,您可能会遵循使用三个文本框的常见 UI 设计= 一个用于区号 + 第二个用于交换 + 第三个用于号码。这样,您可以测试每个数字只包含数字,并且输入了正确的数字位数。
您还可以使用常用技术测试每个按键的数字(忽略不是数字的按键),并在输入所需数量的字符后前进到下一个文本框。
第二个功能使用户更容易进行数据输入。
使用单独的文本框还可以让用户更容易阅读他们的输入,比阅读他们连续正确输入十位数字更容易。
它还避免了您必须与在其条目中使用不同标点符号的人打交道——用括号括住区号,在部分之间使用连字符或点。
编辑:如果您决定只使用一个文本框,那么在这个 SO question中有一些很好的方法来使用正则表达式。