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

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

ただいまの
回答率

90.48%

  • C#

    7451questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    4209questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • 正規表現

    814questions

    正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

C#で入力チェックを行いたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,412

mhozumim

score 1

前提・実現したいこと

C#で入力チェックを行いたいと考えております。
入力できる文字は、全角文字、半角英数、
次の7つの記号 @_-[]<> です。

発生している問題

RegexString.IsMatch関数を利用し、
正規表現を用いてチェックを行おうと考えておりますが、
うまく出来ていません。

どなたか、ご教授頂ければ幸いです

必ずしも正規表現を使わなければならない訳ではないので、
その他の方法であってもお教え頂ければ助かります。

該当のソースコード

RegexString = new System.Text.RegularExpressions.Regex("[^a-zA-Z0-9@<>\\-_\\]\\[[^\\x01-\\x7E]]");
//入力可能な文字以外が含まれていればfalseを返したい
return !RegexString.IsMatch(チェックしたい文字列);

試したこと

サクラエディタで類似の正規表現
[^a-zA-Z0-9@<>\-_\[\][^\x{01}-\x{7E}]]
で検索をかけました。そこでは{}や*など、入力対象外の文字列がマッチしています。

追加情報

utf-8で文字コードは統一しております。
また、開発はMonoDevelopで行っています。

「全角文字、半角英数」の定義について
半角英数はASCIIで定義されているアルファベットおよび数字となります。
全角文字は半角英数以外のひらがな、カタカナ、漢字を想定しておりました。utf-8における3バイト文字になるかと思います。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • mhozumim

    2017/01/08 09:59

    ひらがな、カタカナ、漢字のみを過不足なく定義してから話を始めよ、というご指摘だと思います。このあたりまったく考えておりませんでしたので、勉強してきます。

    キャンセル

  • SurferOnWww

    2017/01/08 11:14

    UTF-8 で 3 バイトと言うと Unicode で U+0800 ~ U+FFFF になりますが、その範囲の中には「ひらがな」「カタカナ」「漢字」以外の文字(多分質問者さんが除外したい文字も)が多々含まれています。IME パッドが使えるならそれを起動して文字とコードの表を見るとそれがよく分かりますので、やってみてください。

    キャンセル

  • mhozumim

    2017/01/10 08:58

    ご指導ありがとうございます! 確認いたします。

    キャンセル

回答 1

checkベストアンサー

0

[...[...]]というパターンマッチが使えるなら期待通りの動作をしてくれそうですが、試しに入れ子にせずに以下のようにしたらどうでしょう?

"[^a-zA-Z0-9@<>\\-_\\]\\[\\u0100-\\uFFFF]"

補足:
このようなパターンだとUnicodeとしての未割当文字(不当文字)も許容されるのですが、それでもよいのかが若干気になりました(サロゲートペアで表現される絵文字なんかも厳密にはチェックできないと思います)。GetUnicodeCategorで文字の種類を確認するといった方法が使えそうな気がしますが自分もやったことないのでお勧めできるのか自信ないです。


訂正:
上の「サロゲートペアの文字が厳密にチェックできない」という記述は不適切な表現でした。そのために誤解を招く恐れがあると気づいたので補足させてください。未割当文字が含まれていない前提なら上述のパターンで(サロゲートペアで表現される文字も含めて)期待通りチェックOKになります。厳密にチェックできないと申し上げた意味は単にサロゲートペアの1文字目、2文字目を意識していない検索になっているということをいいたかっただけだったのですが、考えて見ればそのこと自体この文脈ではいう必要がないことでした。すみませんでした。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/01/08 09:54

    ありがとうございました!
    意図している動作が確認できました。

    また、恥ずかしながら未割当文字、絵文字に関しては考えてすらおりませんでした。
    少し検討してみたいと思います。

    当初の質問に関する疑問は解消されましたので、ベストアンサーとしてこちらを採用させてください。
    重ね重ね、ありがとうございました。

    キャンセル

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

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

関連した質問

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

  • C#

    7451questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    4209questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • 正規表現

    814questions

    正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。