正则表达式验证Kornshell

时间:2014-11-17 11:03:30

标签: regex shell ksh

我有以下REGEX表达式

^(\(?\+?(44|0{1}|0{2}4{2})[1-9]{1}[0-9]{9}\)?)?$

试图涵盖英国所有手机号码的可能性。通过在线REGEX测试器解析这个验证,这很好用,我很难让它在cornshell中正常工作

fn_validate_msisdn() {
MSISDN=$1
REGEX_PTN="^(\(?\+?(44|0{1}|0{2}4{2})[1-9]{1}[0-9]{9}\)?)?$"

if [ `echo $MSISDN | egrep -c $REGEX_PTN` -gt 0 ]
then
    return 1
fi

return 0;
}

被召唤:

if [ ! `fn_validate_msisdn ${MSISDN}` ]
    then
     ...
    fi

然而,它似乎总是失败,无论是使用非法语法还是总是返回大于一。

一些测试数据:

447999999999 : OK
07999999999 : OK
4407948777622 : FAIL
43743874874387439843 : FAIL

任何建议都会很棒

1 个答案:

答案 0 :(得分:1)

你的功能就是这样:

fn_validate_msisdn() {
   MSISDN=$1
   REGEX_PTN="^(\(?\+?(44|0{1}|0{2}4{2})[1-9]{1}[0-9]{9}\)?)?$"
   echo "$MSISDN" | egrep -q "$REGEX_PTN";
}

然后:

fn_validate_msisdn 43743874874387439843
echo $?
1
fn_validate_msisdn 447999999999
echo $?
0

请记住,返回状态为0表示成功,1表示失败。