正则表达式中包含国家代码的电话号码

时间:2020-08-27 04:30:06

标签: regex ruby

这种+91-9999999999格式的电话号码是什么正则表达式?

格式:+(country code)-(10 digit phone number)

我发现许多与此类似的问题,例如:Regex for phone number with country code

但是它们并不特定于这种格式。

如果可能的话,还可以告诉我如何在红宝石中使用它,否则我会自己弄清楚的。

1 个答案:

答案 0 :(得分:1)

请不要以此方式验证用户输入。如果要验证用户输入,通常最好先验证数字位数是否正确,然后再进行自己的格式化。为了验证您输入的字符串中是否包含11到13位数字(即使格式不正确),请考虑以下几点:

input = " + ( 11 ) 123-456-7890 "
input.delete! "^0-9"
input.length >= 11 && input.length <= 13
#=> true

input_chars = input.chars
phone_number, country_code = input_chars.pop(10).join, input_chars.join
p formatted_number = "+(%d) %d" % [country_code, phone_number]
#=> "+(11) 1234567890"
  

另一方面,如果您有一个要验证格式本身的数据集,那就另当别论了。您可以寻找1-3位数字,然后是10位数字,以及所需的锚点或格式。例如:

expected_format = /\A\+\d{1,3}-\d{10}\z/

input =  "+91-9999999999"
input.match? expected_format
#=> true

input =  "91-9999999999"
input.match? expected_format
#=> false

input = "+1111-012345689"
input.match? expected_format
#=> false