1

送信したい単純なhtmlフォームがあります。ログインフォームです。Ruby on Railsコントローラーで提出しています。入力の 1 つ (email) の値に、č、ć、đ、š、ž などの特殊文字が含まれている場合。これらの文字は ? に置き換えられます。キャラクター。

入力フィールド user?@domain.com に値がある場合、"/\A[\w\d._%-]+\@[\w\d.-]+.[\w] に対する評価に合格しません。 {2,4}\z/"

しかし、たとえば、値 userž@domain.com は ruby​​ コードでは (puts メソッドで) user?@domain.com として表示され、上記の正規表現検証に合格します。

jruby 1.6.5.1 と Rails 2.3.8 を使用しています

誰がこれが起こっているのか知っていますか?

4

1 に答える 1

0

\w正規表現では、č、ćなど(ユニコード文字)もキャッチするようです。A-Za-z0-9_代わりに使用する必要がある「通常の」文字のみが必要な場合、正規表現は次のようになります。

/\A[A-Za-z\d._%-]+\@[A-Za-z0-9_.-]+.[A-Za-z0-9_]{2,4}\z/

\dあなたはすでにに持っているので0-9の必要はありません[]。しかし、もし私がそれを書くべきなら、私はそれをより読みやすくするために0-9も使用するでしょう、そして私はandの代わりにand^$好み\Aます\z。それは(他のいくつかの小さな調整で)なります:

/^[A-Za-z0-9_.%-]+\@[A-Za-z0-9_.-]+.[A-Za-z]{2,4}$/

%正規表現で許可している理由がわかりませんか?(それはあなたの質問のあなたの正規表現に含まれています)。

編集: 私はいくつかの検索を行いましたが、プラットフォームによって正規表現のユニコード文字の動作が異なるようです。私が理解している限り、たとえばJavaでは\wに制限されて[A-Za-z0-9_]いますが、他のプラットフォームではユニコード文字をに含めることができます\w。これは私が以下のリンクから見つけました:

ここにいくつかのリンクがあります:

Unicode文字とJava正規表現の照合(例)

そしてそのスレッドで私はこれらのリンクを見つけました:

(これと同じ質問です)Java正規表現の\wと\bに相当するUnicode?

(正規表現チュートリアルから)http://www.regular-expressions.info/unicode.html

于 2012-11-28T15:20:47.203 に答える