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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

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

正規表現

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

6177閲覧

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

mhozumim

総合スコア7

C#

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

正規表現

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/01/06 09:11

編集2017/01/06 09:48

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

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

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

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

###該当のソースコード

C#

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/06 09:15

「全角文字、半角英数」の定義は何ですか? Shift_JIS の 2 バイト文字が全角で、1 バイト文字が半角? そうでないとすると何?
mhozumim

2017/01/06 09:48

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

退会済みユーザー

2017/01/06 10:35

「utf-8における3バイト文字になるかと思います」は確かですか? 違うような気がしますが。
mhozumim

2017/01/08 00:59

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

退会済みユーザー

2017/01/08 02:14

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

2017/01/09 23:58

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

回答1

0

ベストアンサー

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

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

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


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

投稿2017/01/06 09:33

編集2017/01/08 03:52
KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mhozumim

2017/01/08 00:54

ありがとうございました! 意図している動作が確認できました。 また、恥ずかしながら未割当文字、絵文字に関しては考えてすらおりませんでした。 少し検討してみたいと思います。 当初の質問に関する疑問は解消されましたので、ベストアンサーとしてこちらを採用させてください。 重ね重ね、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問