RegEx为有效的国际手机号码

Pet*_*ron 21 regex validation phone-number clickatell

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

所有有效的手机号码都有标准化的正则表达式,例如+27 123 4567吗?我会自己动手,但我担心会错过一个模糊的,有效的电话号码格式.

Jan*_*sen 26

剥离除输入之外的所有字符除"+"和数字后,应该这样做:

^\+[1-9]{1}[0-9]{3,14}$
Run Code Online (Sandbox Code Playgroud)

如果您想更准确地使用国家/地区代码,请在电话号码国家/地区代码列表中查看此问题

但是,我会尝试对我的验证不要太严格.如果被告知他们的有效数字不可接受,则用户会非常沮丧.

  • 根据[E.164](https://en.wikipedia.org/wiki/E.164),国际号码长度可以是15位,没有最小长度,除了国家代码 - 至少有一位数字,用户号码 - 至少一位数(我见过的最短的是三位数).所以上面的正则表达式应该是:`^\+ [1-9] {1} [0-9] {1,14} $` (6认同)
  • 不管任何特定的国家代码,这个 `^([0|\+[0-9]{1,5})?([0-9]{10})$` 也适用于通用电话号码,从`+` 或任何其他数字 (2认同)

a C*_*CVn 5

即使您编写的正则表达式与字符串中的"有效电话号码"完全匹配,也无法保证(通过正则表达式)它们是有效的移动电话号码.在一些国家/地区,移动电话号码与固定电话号码无法区分,至少没有计划查询次数,在某些情况下,即使这样也无济于事.例如,在瑞典,许多人已经将他们常规的固定电话号码"移植"到他们的手机上.它仍然是以前的数字,但现在它用于移动电话而不是固定电话.

由于有效的电话号码只包含数字,我怀疑自己滚动会冒险错过一些不起眼的电话号码.如果您想要更好的确定性,请编写一个生成器,其中列出所有有效的国家/地区代码,并要求其中一个在电话号码的开头与生成的正则表达式匹配.