Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有效国际移动电话号码的RegEx_Regex_Validation_Phone Number_Clickatell - Fatal编程技术网

有效国际移动电话号码的RegEx

有效国际移动电话号码的RegEx,regex,validation,phone-number,clickatell,Regex,Validation,Phone Number,Clickatell,我使用Clickatell向客户的手机发送短信 所有有效的移动电话号码是否都有一个标准化的正则表达式,例如+27 123 4567?我会自己写,但我担心会丢失一个模糊的、有效的电话号码格式。即使您编写的正则表达式完全匹配字符串中的“有效电话号码”子集,也无法保证(通过正则表达式)它们是有效的移动电话号码。在一些国家,移动电话号码与固定电话号码在没有至少一个号码计划查询的情况下是无法区分的,在某些情况下,即使这样也无济于事。例如,在瑞典,许多人将他们的固定电话号码“移植”到手机上。它仍然和以前一样

我使用Clickatell向客户的手机发送短信


所有有效的移动电话号码是否都有一个标准化的正则表达式,例如+27 123 4567?我会自己写,但我担心会丢失一个模糊的、有效的电话号码格式。

即使您编写的正则表达式完全匹配字符串中的“有效电话号码”子集,也无法保证(通过正则表达式)它们是有效的移动电话号码。在一些国家,移动电话号码与固定电话号码在没有至少一个号码计划查询的情况下是无法区分的,在某些情况下,即使这样也无济于事。例如,在瑞典,许多人将他们的固定电话号码“移植”到手机上。它仍然和以前一样,但现在它被移动电话取代了固定电话


由于有效的电话号码仅由数字组成,我怀疑滚动自己的电话号码至少会有漏掉一些模糊的电话号码的风险。如果您想获得更好的确定性,请编写一个生成器,其中包含所有有效国家/地区代码的列表,并要求电话号码开头的一个国家/地区代码与生成的正则表达式匹配。

在从输入中删除除“+”和数字以外的所有字符后,应执行以下操作:

^\+[1-9]{1}[0-9]{3,14}$
如果您想更准确地了解国家代码,请参见上的此问题

然而,我会尽量对我的验证不太严格。如果用户被告知他们的有效数字不可接受,他们会非常沮丧

^\+[1-9]{1}[0-9]{7,11}$ 
正则表达式
^\+[1-9]{1}[0-9]{7,11}$
对于“+290 8000”和小于8位的类似有效数字失败


最长的号码可能是3位数的国家代码、3位数的区号、8位数的订户号码,共14位数。

即使是关于国际号码,我希望代码是:

/^(\+|\d)[0-9]{7,16}$/;
因为您也可以使用以“00”开头的国际号码


为什么我喜欢15位数字:

//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;
    }
}

在这里发布一条说明,供用户将来查看。谷歌的
libphonenumber
是你最想使用的。PHP、node.js、Java等都有包装器,可以使用Google一直在收集的数据,并减少了维护要应用的大型regex模式数组的要求。

我知道并非所有手机号码都存在,我只需要验证格式,因为数据输入错误(例如填写错误的字段)。@FreshCode,我不是这个意思。我想说的是,你可以有电话号码,从数字序列中根本无法分辨是固定电话还是移动电话。因为您的问题是让正则表达式检查给定字符串是否是有效的移动电话号码,所以这是相关的。这一点很好。我可能应该澄清,我所说的有效性是指“一个潜在的电话号码”,例如12345,但不是xyz123。为什么不尝试向客户提供的号码发送短信呢?让短信包含客户需要输入才能继续的唯一代码。哇!!你在2011年说过这句话。今天我们有一个广泛使用的OTP概念。@snoopy:链接不错!是的,在这种情况下,^\+[1-9]{1}[0-9]{7,11}$可能是最严格的一个。根据国际数字可以是15位,没有最小长度,除了国家代码-至少一位数字和订户号码-至少一位数字(我见过的最短的是三位数字)。所以上面的正则表达式应该是:
^\+[1-9]{1}[0-9]{1,14}$
非常好的参考,Sergei!我会调整我的答案,但会考虑任何一个国际电话号码少于四位数的人。到目前为止,我发现的最短的一个来自新西兰,长度为5位数:+64010。由于E.164并没有定义最小值,我个人认为两位数的国际号码可以作为未来的证明。不管具体的国家代码是什么,这个
^([0 | \+[0-9]{1,5})([0-9]{10})$
也适用于通用电话号码,从
+
或任何其他号码开始