この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは、cloverです!
先日仕事で、ドコモのシークレットコードに対応する作業があったのですが、その際「電話番号(11ケタ)+シークレットコード(4ケタ)@ドコモ」の4ケタの部分以外の部分のマッチングが必要になりました。
LIKE検索では難しいかなぁと思って先輩に聞いてみたら、何とPostgreSQLには正規表現でのマッチングが出来るとのこと。
というわけで、ちょっと調べてみました~例えば、「090123456781234@ドコモ」というメールアドレスがあって、「09012345678xxxx@ドコモ(xxxxの部分は数値であれば何でもよい)」という条件で、マッチするデータがあるかを調べようとしたとき、
PostgreSQLでは「~(チルダ)」を用いて、正規表現検索を行います。
以下のような感じになります。
select count(*) from users where mobile_email ~ ‘09012345678[0-9]{4}@ドコモ’;
もちろんこれはRailsのfind文などでも使えるので、
User.find(:first, :conditions => [“mobile_email ~ ?”, ”09012345678[0-9]{4}@ドコモ’])
となります。
「\d(数値)や\w(英数字)」などの表現の書き方はまたちょっと違うみたいなので、そのあたりも駆使して使ってみたいと思います☆