1

Oracleで電話番号(または任意の番号)を正規表現して、正確に正しい長さの後に非数字が続き、場合によっては再び数字になるようにするにはどうすればよいですか?

例えば

SELECT 1 FROM DUAL WHERE 
  REGEXP_LIKE('555-5555x123', '^[0-9]{3,4}[^[:digit:]][0-9]{4}.*$')

番号555-5555が問題ない場合、555-5555x123は問題ありませんが、555-5555123は問題ありません。

太った指を持った人が電話番号を入力していて、番号を追加して間違えた場合(入力形式を制限する必要があるとは言わないでください。私のデータではありません)、これを問題としてフラグ付けする必要があります。その場合、例は555-55545x123のようになります。

OracleREGEXP_LIKEのテストケース値の結果555-5555ok555-5555x123ok555-55551x123失敗555-55551失敗555-5555555失敗

4

2 に答える 2

4

式の最後にあるを削除するだけ.*で、追加のものとのマッチングを担当します。

SELECT 1 FROM DUAL WHERE 
  REGEXP_LIKE('555-5555x123', '^[0-9]{3,4}[^[:digit:]][0-9]{4}$')

そうすれば、3桁または4桁、1桁以外、さらに4桁と一致します。

およびは{3,4}{4}許可する桁数を定義する数量詞です。それらを必要な値に変更するだけです。たとえば{4,}、4つ以上に一致します。

^正規表現を文字列の先頭と$末尾に固定します。

アップデート

最後の4桁の後に非桁があることを確認するには、交互に使用できます

SELECT 1 FROM DUAL WHERE 
  REGEXP_LIKE('555-5555x123', '^[0-9]{3,4}[^[:digit:]][0-9]{4}($|[^0-9].*$)')

ここで、4桁の後に、行の終わりまたは数字以外(否定された文字クラス)のいずれかが必要です[^0-9]。その後、行の終わりまで何でも(改行を除く)。

あなたの場合にそれが重要かどうかはわかりませんが、[^0-9]この使用を避けたい場合は、改行文字にも一致します[^0-9\r\n]

于 2012-06-12T08:50:12.050 に答える
1
SELECT regextestcol FROM regexptest WHERE REGEXP_LIKE(address,'^[0-9]{3}-[0-9]{4}(\w\d{3})?$');

説明:

  • ^検索パターンの開始

  • [0-9]{3}-[0-9]{4}ハイフンで区切られた3桁と4桁の数字に一致します

  • (\w\d{3})??単語に一致します。3桁の数字で、どちらも記号と一緒にオプションにすることができます
  • $検索パターンの終わり
于 2012-12-28T07:22:37.913 に答える