更多RegEx问题 - 英国电话号码 - Bash

时间:2012-12-24 13:50:53

标签: regex bash phone-number

我的RegEx存在更多问题, 这一次,我必须要求用户输入他们的电话号码,然后检查它是否正确。

我尝试了以下内容:

if [[ "$number" =~ ^[\(]?[\+44,0][1-9][0-9]{3}[\)]?[\ ]?[0-9]{6} ]]
then
    echo "YEP"
else
    echo "NOPE"
fi

我也有一些乱七八糟的RegEx ......

这似乎适用于以下数字:

07384323455
(01273)277364
01677 336482

但不包含+44中的任何数字......

我有什么问题,或者任何人都可以建议吗?

提前致谢,

萨姆

2 个答案:

答案 0 :(得分:1)

试试这个表达式:^(?:\((?:\+44\d{4}|\d{5})\)|\+44\d{3}|\d{5}) ?\d{6}$

演示+解释:http://regex101.com/r/lC5kM6

以下是对您的表达的解释:regex101.com/r/gT5oT8(尝试找出错误)

答案 1 :(得分:0)

尝试以下

#!/bin/bash
for number in '07384323455' '(01273)277364' '01677 336482' '+447384323455' '(+447384)323455' '+7384323455' '(+437384)323455'
do
    if [[ "$number" =~ ^[\(]?(\\+44|0){1}[1-9]{1}[0-9]{3}[\)]?[\ ]?[0-9]{6} ]];
    then
        echo "YEP"
    else
        echo "NOPE"
    fi
done

输出

YEP
YEP
YEP
YEP
YEP
NOPE
NOPE

<强>解释

  • (\\+44|0){1} - 匹配字符序列+44|0,捕获组只匹配一次。