MySQLで正規表現を使って制御文字を抽出
Oracleでは使えなかった正規表現がMySQLで使える!!とおもったらOracleも10gから使えてました。
SQLクリニック(1):Oracle 10gの正規表現で文字列操作を極める (1/2) - @IT
携帯からユーザ登録などすると意図せずに改行コードなどの制御文字が登録されてたりします。
登録時にチェックして弾けばいいんでしょうが、既にサービスが開始されててチェックしてなかった〜というアホなサービスでは、後から置き換えたりしないとほほ。。
ということで、ユーザ名に制御文字列が含まれてないかMySQLでは検索時に抽出できるんです!賢い。
-- sample select SELECT * FROM users WHERE BINARY name REGEXP '[:cntrl:]' ;
文字列の後ろにスペース、改行コードがあるユーザ名を検索したい場合などは
-- sample select SELECT * FROM users WHERE BINARY name REGEXP '[\r\n ]+$' ;
[:spece:]でもいいかも知れません。
POSIXが使えるのはいいですね〜
POSIXもいろいろ種類があるので調べてみるといいかも知れません。
RubyでもPOSIXが利用出来るので、取得したnameのデータをgsubすると綺麗に変換できたりします。
否定(でない)も簡単に書けます。
サンプルとして、先頭は空白以外?ってのも簡単に書けます。
# sample >> name = 'hotoolong' => "hotoolong" >> /^[^[:blank:]]+/ =~ name => 0
ここは\sでもいいかも知れないですが、、
# sample >> /^[^\s]+/ =~ name => 0
美しい。かなり使えそうです。
http://dev.mysql.com/doc/refman/5.1-olh/ja/regexp.html
Ruby Reference Manual