0

我的正则表达式还有更多问题,这一次,我必须要求用户输入他们的电话号码,然后检查它是否正确。

我尝试了以下方法:

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

我也对稍微改变正则表达式感到一团糟......

这似乎适用于以下数字:

07384323455
(01273)277364
01677 336482

+44里面没有任何数字......

有什么我做的非常错误的事情或任何人可以提出的建议吗?

提前致谢,

山姆

4

2 回答 2

1

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

演示+说明:http ://regex101.com/r/lC5kM6

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

于 2012-12-24T14:34:37.643 回答
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,捕获组匹配一次。
于 2012-12-24T14:26:31.587 回答