2014-11-17 2 views
0

나는 영국에서 휴대 전화 번호의 모든 사태를 커버하기위한 시도에서 다음과 같은 정규식 표현정규식 유효성 콘 셸

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

있습니다. 나는 그것이 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 

구문이 틀리거나 항상 1보다 큰 값을 반환합니다. 테스트 데이터는

을 :

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

제안은 좋은 것

+0

Google에서 정규식을 확인하는 데 도움이 될 수 있도록 유효하고 잘못된 몇 가지 예를 제공 할 수 있습니까? –

+0

질문 테스트 데이터에서 인용 : 447,999,999,999 : OK 07,999,999,999 : OK 4407948777622 : FAIL 43,743,874,874,387,439,843 : FAIL – Charabon

답변

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 me의 성공은 1이고 여기서 1은 실패를 의미합니다.