日本語という文字についてのバリデーション

日本語というものを抽出するというのは実際は非常に難しいです。これはシステム的に難しいというのもそうですが、実際問題として人間が決めるポリシーなので結局は「何をもって日本語にするのか」というところにつきます。
とはいえ、半角英数記号以外を日本語とするという大雑把なくくりも可能ですし、ひらがな・カタカナ・漢字というものを日本語とすることも可能です。
ですが、しかし、それだけではなかなか済まないってこともあります。

ちまたの正規表現

こういうのが比較的出回っているんですが、
/^[一-龠あ-んア-ンa-zA-Zーヽヾ]+$/
これはなかなかシステム的にもポリシー的にも不完全です。というのはこれだど「人々」とか「佐々木」とかが通らない上にUnicodeで扱っている漢字すべてを網羅していないということになっております。もうちょっと完全なかたちにするのだったら、
/^[一-龠㐀-㿸﨑々〆あ-んア-ヸa-zA-Zーヽヾ]+$/
というようなものになるかもです。とはいえ、これも完全なものではありません。何せポリシーの問題と私の知らない漢字(または記号に分類されている漢字)などがあるかもしれないからです。またそれらの奇妙で珍しい漢字が連動するすべてのシステムで正常に表示されるとも限りません。
逆の発想としては半角英数字記号以外を日本語とみるという方法ですが、これはかなり広範囲になってしまいます。
例えば数字以外の文字だと、
/^[^0-9].*$/
こんな風になりますが、「〠」のも「ៀ」のもマッチします。
そもそもヴァリデーションではなくサニタイズという目的だったら、大雑把にいってしまうと半角記号を弾くべきということになると思うので、
/[^!\"#$%&\'()=~|{`}*+_?><_\/\.,\]:;\[@].*$/
を入力許可文字と扱うこともできるかと。

いずれにしろ、バリデーションというか正規表現の目的が明確じゃないと作るに作れない。
通常フォーム入力で行われる入力の値に対するバリデーションは、データの整合性というかデータとして正しいものにできるだけするという目的なので、セキュリティーとかの対策とはまた別ですよ。それはエスケープなりなんなりをまた別でやらないとダメです。

http://www.seiai.ed.jp/sys/text/java/utf8table.html
http://www.as400-net.com/tips/database/31.html