2011-12-16 10 views
0

データベース内でOracle 11gを使用し、SQL言語としてPL/SQLを使用して、テーブル内の特定の列を検証します。PL/SQLでRegExpを使用して都市名を検証する方法

要件(S):

  1. それが唯一の英字と数字なしを含むように "都市名" を検証します。

  2. サンノゼやサンフランシスコなどの都市のためのスペースを入れることができます。

    function ValidateCity(city in varchar2) return varchar2 is 
        valid varchar2(50) := 'valid'; 
    begin 
        if not REGEXP_LIKE (city, '^[A-Z\s]*$') then 
         valid := (case when valid = 'valid' then '' else valid end) 
           || 'Does not match pattern ^[A-Z\s]*$ '; 
        else 
         valid := 'Required '; 
        end if; 
        return valid; 
    end; 
    

スペースがあるときに私はいない「ツーソン」のような単一の都市名を渡すが、とき、これは、例えば、動作しますサンフランシスコまたはロサンゼルス。

ヒント/ご提案/アドバイスをお待ちしております。

答えて

1

normal* (special normal*)* ...これを読んで時間を割いていただきありがとうございます再び...

^[[:alpha:]]+([-[:space:]][[:alpha:]]+)*$

オラクルの正規表現はhereを参照してください、\sをサポートしていません。 [:alpha:][:space:]はPOSIX文字クラスであり、常に文字クラスである必要があります。 [-[:space:]]は、「ダッシュまたはスペース文字」を意味します。代わりに[:space:]を1つの空白文字に置き換えることができます。

は、[単純化するために、編集:ここspecialは本当に唯一のダッシュやスペースのいずれかである]

+0

[:スペースは:] POSIX文字ですクラス。スペース、改行、垂直タブ、水平タブが含まれます。あなたは都市名の一部としてそれらを受け入れることを意味しましたか?そして、はい、タブ文字を入力するのは難しいかもしれませんが、いくつかの種類のクエリには大混乱が生じます。 –

+0

私はこれについても疑問に思っていましたが、元の例には特定の方言にこれらのすべてを含む '\ s'がありました:p – fge

+0

fge:ありがとうございます!はい、「サンフランシスコ」や「ロサンゼルス」などの名前の間にスペースがある都市では機能しますが、「KAILUA-KONA」などのダッシュを含む都市でも機能する必要があります。^[A-Z] +([[ - ]] [A-Z] +)* $を使って試しましたが、うまくいきませんでした。すべての助けに感謝します。 –

0

を記録するために、オラクルは、Perlスタイルの正規表現をサポートしています:Perl-Influenced Extensions

関連する問題