Javaで入力チェックを正規表現で行う

入力チェックを正規表現で行いたい場合、以下のようなパターンが使える


「ASCII文字」のみ

public static final String MATCH_ASCII = "^[\\u0020-\\u007E]+$";

「英字」のみ

public static final String MATCH_ALPHA = "^[a-zA-Z]+$";

「数字」のみ

public static final String MATCH_NUMBER = "^[0-9]+$";

「ひらがな」のみ

public static final String MATCH_HIRAGANA = "^[\\u3040-\\u309F]+$";

「カタカナ」のみ

public static final String MATCH_KATAKANA = "^[\\u30A0-\\u30FF]+$";

「半カタカナ」のみ

public static final String MATCH_HANKANA = "^[\\uFF65-\\uFF9F]+$";

「全角文字」のみ

public static final String MATCH_ZENKAKU = "^[\\u3040-\\u30FF]+$";

メールアドレス(簡易)

public static final String MATCH_MAIL = 
  "([a-zA-Z0-9][a-zA-Z0-9_.+\\-]*)@(([a-zA-Z0-9][a-zA-Z0-9_\\-]+\\.)+[a-zA-Z]{2,6})";

URL

public static final String MATCH_URL = 
  "^(https?|ftp)(:\\/\\/[-_.!~*\\'()a-zA-Z0-9;\\/?:\\@&=+\\$,%#]+)$";


使う場合は以下のようにする

String str = "aaa";
if (str.matches(MATCH_ASCII)) {
	System.out.println("一致");
} else {
	System.out.println("不一致");
}

また、複数のチェックを組み合わせてマッチングを行いたい場合は、
以下のようにコードを別途定義しておき、文字列を繋げれば使いやすい

public static final String HIRAGANA_CODES = "\\u3040-\\u309F";

public static final String KATAKANA_CODES = "\\u30A0-\\u30FF";

//「指定コードのみ」とマッチングする正規表現を返す
public static String toMatchRegex(String codes) {
	return "^[" + codes + "]+$";
}

//「指定コード以外が含まれる」とマッチングする正規表現を返す
public static String toNotMatchRegex(String codes) {
	return ".*[^" + codes + "].*";
}


「ひらがな」と「カタカナ」のみ

String str = "あいウエ";
if (str.matches(toMatchRegex(HIRAGANA_CODES + KATAKANA_CODES))) {
	System.out.println("一致");
} else {
	System.out.println("不一致");
}

「ひらがな」と「カタカナ」以外が含まれる

String str = "あいウエabc";
if (str.matches(toNotMatchRegex(HIRAGANA_CODES + KATAKANA_CODES))) {
	System.out.println("一致");
} else {
	System.out.println("不一致");
}

どうもメールアドレスに関しては、かなり複雑になっていて厳密にはチェックがしにくいらしい
http://blog.livedoor.jp/dankogai/archives/51189905.html


しかし、そもそも、本当に厳密にチェックする必要があるのかっていう疑問もあるので個人的には簡易的なチェックで十分だと思ってます


■参考

文字コード一覧
http://www.unicode.org/charts/


PHPフレームワーク別のメールアドレス正規表現
http://catbot.net/blog/2007/06/re_php.html


メールアドレスで使える文字と使えない文字
http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9
http://ameblo.jp/tondemonight/entry-10117100089.html


サルにもわかる正規表現入門
http://www.mnet.ne.jp/~nakama/


正規表現
http://www.komonet.ne.jp/~perl/chap7.htm


なんと、日本語がメールアドレスで使えるようになるらしいです
http://d.hatena.ne.jp/tmatsuu/20090402/1238692182