次の正規表現をawkで使用して、電話番号を検証したいと思います。
echo 012-3456-7890 | awk '/^\(?0[1-9]{2}\)?(| |-|.)[1-9][0-9]{3}( |-|.)[0-9]{4}$/ {print $0}'
しかし、次のエラーが発生します。
awk: line 1: regular expression compile failed (missing operand)
ここで使用される範囲は固定長であるため、範囲全体を単純に書き出すことができます[0-9]{3}
=> [0-9][0-9][0-9]
。そして、(| |-|.)
の代わりに、( |-|.)?
-混乱していますが、スペースと.
に加えて、任意の文字(-
)を許可していますか?とにかくスペースと.?
は-
と一致するので、それは.
である可能性があります。リテラルピリオド.
と一致する場合は、代わりに[- .]?
を使用する必要があります(先頭の-
は、文字範囲としての解釈を避けるためです)。そう:
^\(?0[1-9]{2}\)?(| |-|.)[1-9][0-9]{3}( |-|.)[0-9]{4}$
になる:
^\(?0[1-9][1-9]\)?[- .]?[1-9][0-9][0-9][0-9][- .][0-9][0-9][0-9][0-9]$