質問: 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バイト文字になるかと思います。
回答: `[...[...]]`というパターンマッチが使えるなら期待通りの動作をしてくれそうですが、試しに入れ子にせずに以下のようにしたらどうでしょう? `"[^a-zA-Z0-9@<>\\-_\\]\\[\\u0100-\\uFFFF]"` 補足: このようなパターンだとUnicodeとしての未割当文字(不当文字)も許容されるのですが、それでもよいのかが若干気になりました(サロゲートペアで表現される絵文字なんかも厳密にはチェックできないと思います)。GetUnicodeCategorで文字の種類を確認するといった方法が使えそうな気がしますが自分もやったことないのでお勧めできるのか自信ないです。 訂正: 上の「サロゲートペアの文字が厳密にチェックできない」という記述は不適切な表現でした。そのために誤解を招く恐れがあると気づいたので補足させてください。**未割当文字が含まれていない前提なら上述のパターンで(サロゲートペアで表現される文字も含めて)期待通りチェックOKになります**。厳密にチェックできないと申し上げた意味は単にサロゲートペアの1文字目、2文字目を意識していない検索になっているということをいいたかっただけだったのですが、考えて見ればそのこと自体この文脈ではいう必要がないことでした。すみませんでした。