验证美国电话号码

以下正则表达式:

us.phones.regex <- "^\\s*(\\+\\s*1(-?|\\s+))*[0-9]{3}\\s*-?\\s*[0-9]{3}\\s*-?\\s*[0-9]{4}$" 

验证电话号码:+1-xxx-xxx-xxxx,包括每组数字开头/结尾的可选前导/尾随空白,但不在中间,例如:+1-xxx-xxx-xx xx 无效。- 分隔符可以用空格替换:xxx xxx xxx 或不用分隔符:xxxxxxxxxx+1 前缀是可选的。

我们来检查一下:

us.phones.regex <- "^\\s*(\\+\\s*1(-?|\\s+))*[0-9]{3}\\s*-?\\s*[0-9]{3}\\s*-?\\s*[0-9]{4}$"

phones.OK <- c("305-123-4567", "305 123 4567", "+1-786-123-4567", 
    "+1 786 123 4567", "7861234567", "786 - 123   4567", "+ 1 786 - 123   4567")

phones.NOK <- c("124-456-78901", "124-456-789", "124-456-78 90", 
    "124-45 6-7890", "12 4-456-7890")

有效案例:

> grepl(us.phones.regex, phones.OK)
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
> 

无效的案例:

 > grepl(us.phones.regex, phones.NOK)
[1] FALSE FALSE FALSE FALSE FALSE
> 

注意

  • \\s 匹配任何空格,制表符或换行符