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、キャプチャ グループは 1 回だけ一致します。
于 2012-12-24T14:26:31.587 に答える