質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

jquery.validationEngine-ja.jsで使用している正規表現をC#で使用したいです。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 847

score 15

お世話になります。

jquery.validationEngine-ja.jsで使用しているメール、電話番号と同じ正規表現をC#で使用したいです。

jquery.validationEngine-ja.jsの正規表現

 "email": {
  "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,
  "alertText": "メールアドレスが正しくありません"
},

// 電話番号チェック
"phone": {
  "regex": /^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/,
  "alertText": "ハイフンありの正しい番号を入力してください"
},

以下のように、正規表現をそのままコピーしたものをC#で試しましたが、うまくいきませんでした。

Regex emaiRegex  = new Regex(@"/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i");
Regex phoneRegex = new Regex(@"/^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/");
bool emailCheck = emaiRegex.IsMatch("testmail@yahoo.co.jp");  //trueになると思いましたが、falseになります。
bool phoneCheck = phoneRegex.IsMatch("03-1111-2222");      //trueになると思いましたが、falseになります。

C#で使用するにはどうしたら良いか教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • SurferOnWww

    2018/08/12 10:56 編集

    何を作っているかと(ASP.NET Web Forms?, ASP.NET MVC? その他?)、開発環境(OS, .NET, IIS, Visual Studio のバージョン・エディションやブラウザは何かなど)を書入れください。.NET のバージョンが特に重要です。

    キャンセル

  • SurferOnWww

    2018/08/12 10:59

    ASP.NET に標準&組込で用意されている検証機能を使わないのは何故ですか? 正規表現で検証できる機能ももちろんあります。それを使わないというのはふつうあり得ないのですけど。

    キャンセル

回答 2

checkベストアンサー

+2

C# でのエラーの原因は phoenix3430025 さんの回答の通りですが、ASP.NET に用意されている検証機能を利用すべきというもっと重要と思われることを書いておきます

ASP.NET Web Forms アプリであれば RegularExpressionValidator コントロールを使いましょう。

ASP.NET MVC の場合は、モデルクラスのプロパティに RegularExpressionAttribute データーアノテーション属性を付与してください。

そうすれば、ほとんど自力でコードを書かなくても、クライアント側とサーバー側の両方で動く検証機能が自動的に実装されます。

ASP.NET 組み込みの機能ですので、全ての検証動作が ASP.NET Web アプリとして整合が取れたものになります。これが非常に重要なことです。

よほどの理由がない限り、jquery.validationEngine-ja.js を使うとか、自力で検証用にコードを書くとかの必要はありません。

ASP.NET Web Forms アプリ用の RegularExpressionValidator コントロールを使った一例ですが、以下の記事が参考になると思います。

RegularExpressionValidator を使った入力内容の検証 (ASP.NET プログラミング)
https://www.ipentec.com/document/csharp-aspnet-regular-expression-validator

その記事に書いてあるように、一般的なメールアドレスの検証を行うための正規表現は、デザイナでウィザードベースで設定できます。

質問に書かれた独自のメールアドレス用正規表現を使いたいのであれば、(カスタム) を選んで、[検証の表現(E)]のテキストボックスに最初と最後の / を省いて、^ から $ までの文字列をコピペするだけで OK です。(最初と最後の / は JavaScript 専用)

そうすれば、自動的にクライアント側とサーバー側両方で検証がかかるようになります。

クライアント側で検証 NG の場合はポストバックがキャンセルされます。

ブラウザの JavaScript が無効になっている場合はクライアント側での検証はかからず、ポストバックされますが、サーバー側での検証は行われます。

もちろんメールアドレス以外の任意の正規表現も設定できます。詳しくは以下の記事が参考になると思います。

ASP.NET の正規表現
https://msdn.microsoft.com/ja-jp/library/ms972966.aspx

自力でコードを書くなんてことは普通あり得ないのが理解いただけるのではないでしょうか?

ASP.NET MVC の場合は上に紹介した記事とはやり方が違ってきますが、同等の検証機能を実装できますし、やはり自力で検証用のコードを書くなんてことはあり得ないです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/12 22:51

    ご丁寧に教えて頂き、ありがとうございます。
    現在、プライベートでASP.NET MVCを勉強していまして、入力チェックをどうプログラミングしたら良いか考えていました。
    これから、RegularExpressionAttributeについて調べていきます。

    キャンセル

+1

javascriptの正規表現は / (スラッシュ)で検索する文字列を囲みますが、
それをそのまま文字列にしてはダメです。
C#で指定する文字列は「検索文字列」ですから、
最初と最後の / は外さないといけません。
最後の / につづく i とかも要らないです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/12 22:47

    教えて頂き、ありがとうございます。
    /とiを外したらうまくいきました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る