我使用Clickatell向客户的手机发送短信。
是否所有有效的手机号码都有标准化的正则表达式,例如: +27 123 4567?我会自己动手,但我担心会错过一个模糊的,有效的电话号码格式。
答案 0 :(得分:26)
从你的输入中删除除“+”和数字之外的所有字符后,应该这样做:
^\+[1-9]{1}[0-9]{3,14}$
如果您想更准确地使用国家/地区代码,请在List of phone number country codes
上查看此问题但是,我会尝试对我的验证不要太严格。如果被告知他们的有效数字不可接受,则用户会非常沮丧。
答案 1 :(得分:5)
即使您编写的正则表达式与字符串中的“有效电话号码”完全匹配,也无法保证(通过正则表达式)它们是有效的 mobile 电话号码。在一些国家/地区,移动电话号码与固定电话号码无法区分,至少没有计划查询次数,在某些情况下,即使这样也无济于事。例如,在瑞典,很多人将他们的常规固定电话号码“移植”到他们的手机上。它仍然和以前一样,但现在它用于移动电话而不是固定电话。
由于有效的电话号码只包含数字,我怀疑自己滚动可能会错过至少一些模糊的电话号码的情况。如果您想要更好的确定性,请编写一个生成器,其中包含所有有效国家/地区代码的列表,并要求在电话号码开头的其中一个与生成的正则表达式匹配。
答案 2 :(得分:2)
^\+[1-9]{1}[0-9]{7,11}$
正则表达式^\+[1-9]{1}[0-9]{7,11}$
对于“+290 8000”以及类似的有效数字短于8位而失败。
最长的数字可能是3位国家代码,3位数区号,8位数用户号码,14位数字。
答案 3 :(得分:2)
即使是关于国际号码,我也希望代码如下:
/^(\+|\d)[0-9]{7,16}$/;
因为您可以使用以“00”开头的国际号码。
为什么我更喜欢15位数:http://en.wikipedia.org/wiki/E.164
答案 4 :(得分:2)
在此处为用户展示一条注释,展望未来。谷歌libphonenumber
是您最有可能想要使用的。 PHP,node.js,Java等包装器使用Google一直在收集的数据,并减少了维护大型正则表达式模式的要求。
答案 5 :(得分:0)
// Regex - 查看新加坡有效的手机号码
public static boolean isSingaporeMobileNo(String str) {
Pattern mobNO = Pattern.compile("^(((0|((\\+)?65([- ])?))|((\\((\\+)?65\\)([- ])?)))?[8-9]\\d{7})?$");
Matcher matcher = mobNO.matcher(str);
if (matcher.find()) {
return true;
} else {
return false;
}
}