電話番号を単に数字とハイフンの並びと見るだけであればまだいいのですが、真面目に扱おうとすると割と面倒です。
幸い、Googleのlibphonenumber
やそれをバリデーション用にラップしたtelephone_number
というgemがあるので、それらを活用すると簡単に扱えるはずです。
電話番号のバリデーションをそのうち実装することになりそうなので、使い方を調べてみました。
ざっくり書くとこんな感じ。
validates :phone, telephone_number: {country: :ja, types: [:fixed_line, :mobile]}
コードを見る限りではcountry
の指定は必須、types
は指定しない場合は全タイプで判定するようですね。
https://github.com/mobi/telephone_number/blob/master/lib/active_model/telephone_number_validator.rb
マニュアルでの呼び出しの場合、country
は必須ではありません。
phone = TelephoneNumber::Number.new(number) # country => nil
phone.valid?
その場合、validation時にどこの国の番号かを推測するために、国番号が先頭になるかどうかなどのマッチングを行います。きちんと判定するには国はアプリケーション側で渡すのが良さそうです。
このライブラリを使ったRailsのデモサイトもあります。
バリデーション結果やいろんな表記に変換した結果なんかを見ることができます。