我的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
中的任何数字......
我有什么问题,或者任何人都可以建议吗?
提前致谢,
萨姆
答案 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
,捕获组只匹配一次。