0

提供された文字列で、Oracle の正規表現 (REGEXP_LIKE) を使用した文字のみが許可されていることを確認する必要があります。使用できる文字は次のとおりです: abcdefghijklmnopqrstuvwxyz0123456789_-. 実行しようとしています

SELECT CASE 
         WHEN REGEXP_LIKE('abcdefghijklmnopqrstuvwxyz0123456789_-.'
                        , '^[a-z0-9_\-\.]+$') 
         THEN 'true' 
         ELSE 'false' 
END tmp 
FROM dual;

結果は「false」になります。

これに関するアイデアはありますか?

4

4 に答える 4

1

どうですか:

SELECT CASE
          WHEN REGEXP_LIKE ('abcdefghijklmnopqrstuvwxyz0123456789_-.',
                            '^([a-z]|[0-9]|_|\-|\.)+$')
          THEN
             'true'
          ELSE
             'false'
       END AS tmp
  FROM DUAL;

それはあなたのためにそれを修正しますか?(私はこれをテストするためにPCの前にいないのではないかと心配しています)

編集:

以下のFWIWは、文字列が検証に失敗した原因を確認する必要がある場合、無効な文字のみを残して、すべての有効な文字を削除する必要があります。

SELECT REGEXP_REPLACE ('abcdefghijklmnopqrstuvwxyz0123456789_-.',
                       '([a-z]|[0-9]|_|\-|\.)+',
                       '') AS tmp
  FROM DUAL;

戻り値がNULL有効で、null でない場合は、検証エラー メッセージで無効な文字を返すことができます。

それが役に立てば幸い...

于 2012-06-27T08:36:05.300 に答える
0

ダッシュ "-" は、右角かっこ [] の間の最初の要素でなければならず、[] の間のバックスラッシュは特別な意味を持ちません。

于 2012-06-27T08:19:53.557 に答える
0


SELECT CASE
         WHEN COUNT(REPLACE((TRANSLATE('abcdefghijklmnopqrstuvwxyz0123456789_-.',
                                       'abcdefghijklmnopqrstuvwxyz0123456789_-.',
                                       ' ')),
                            ' ',
                            '')) = 0 THEN
          'TRUE'
         ELSE
          'FALSE'
       END AS CHECK_RESULT
  FROM DUAL

このクエリは、事前定義されたリストにない文字が存在する場合、false を返します。

それが役に立てば幸い。

于 2012-07-02T07:56:19.103 に答える