【7STEP】Rubyで郵便番号の正規表現と自動修正を解説!

Rubyの正規表現を用いた郵便番号の自動修正のイメージ図Ruby
この記事は約11分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

皆さんこんにちは。

今回の記事では、Rubyを使って郵便番号の正規表現と自動修正を学んでいきます。

プログラミングの中でも正規表現は非常に便利なツールの一つで、データの抽出や変換、検証に幅広く使用されます。

Rubyはその高い読みやすさと記述の簡潔さから、多くの開発者に愛されています。

そのRubyの力を借りて、今回は郵便番号の自動修正という具体的な課題に取り組んでいきましょう。

●Rubyとは

Rubyは、1995年に日本人の松本行弘氏によって開発されたプログラミング言語です。

オブジェクト指向の言語として設計されており、シンプルさと柔軟性を重視した設計哲学が特徴です。

○Rubyの特徴

Rubyはそのシンプルさと高い生産性から、ウェブアプリケーションの開発を始め、さまざまな場面で使われています。

オブジェクト指向の特性を活かし、コードはとても読みやすく、また書きやすいことが特徴です。

また、強力なgemというライブラリーシステムがあり、その中には今回使用する正規表現も含まれています。

●正規表現とは

正規表現とは、文字列の検索や置換を行うためのパターンを表現するための言語です。

特定のルールを持った文字列を探したり、形式をチェックしたりするのに使います。

例えば、メールアドレスのバリデーションや特定の単語を含む文章の抽出など、文字列操作に関わる多くの場面で利用されます。

○Rubyでの正規表現の使い方

Rubyで正規表現を利用するには、スラッシュ(/)で囲んだ正規表現リテラルを使うか、Regexpクラスの新規インスタンスを生成する方法があります。

具体的な使い方は後述のサンプルコードで詳しく説明します。

●郵便番号の正規表現

ここからは、Rubyの正規表現を使って郵便番号を操作する方法を学んでいきます。

郵便番号は日本では7桁の数字で表され、”123-4567″のように中央にハイフンが入る形式が一般的です。

この形式を正規表現で表すと次のようになります。

○サンプルコード1:基本的な郵便番号の正規表現

このコードでは、郵便番号の形式を表す正規表現を作成しています。

下記のコードは、正規表現のパターンとして”3桁の数字-4桁の数字”を表しています。

zipcode_pattern = /\A\d{3}-\d{4}\z/

この正規表現は、「\A」で文字列の先頭、「\z」で文字列の末尾を表し、その間に「\d{3}-\d{4}」というパターンを指定しています。

「\d」は数字を、「{n}」は直前の要素がn回繰り返されることを表します。

したがって、「\d{3}-\d{4}」は「3桁の数字-4桁の数字」の形式を表しています。

この正規表現を使って、文字列が正しい郵便番号の形式であるかどうかを確認できます。

例えば、「123-4567」は正しい郵便番号の形式ですが、「1234567」や「123-456」は正しい形式ではありません。

次に、この正規表現を使って文字列が正しい郵便番号の形式であるかどうかを確認するコードを書いてみましょう。

zipcode_pattern = /\A\d{3}-\d{4}\z/

puts zipcode_pattern === '123-4567'  # => true
puts zipcode_pattern === '1234567'   # => false
puts zipcode_pattern === '123-456'   # => false

このコードでは、’123-4567’という文字列は郵便番号の形式に適合しているのでtrueを返し、’1234567’と’123-456’は郵便番号の形式に適合していないのでfalseを返します。

さて、基本的な郵便番号の正規表現について説明しましたが、より複雑なケースを扱うための応用的な正規表現について見ていきましょう。

○サンプルコード2:郵便番号の正規表現の応用

たとえば、ユーザーが入力する郵便番号にスペースが含まれていた場合や、ハイフンが抜けて7桁の数字だけが入力された場合などを考慮する必要があります。

そんなときは、正規表現のパターンを少し工夫してみましょう。

下記のコードでは、スペースを含んでも、ハイフンが抜けても、それでも郵便番号として認識できるような正規表現を作っています。

zipcode_pattern = /\A\d{3}\-?\s*\d{4}\z/

puts zipcode_pattern === '123-4567'  # => true
puts zipcode_pattern === '123 4567'  # => true
puts zipcode_pattern === '1234567'   # => true
puts zipcode_pattern === '123- 4567' # => true
puts zipcode_pattern === '123 -4567' # => true

ここでは、正規表現のパターンに「-?」と「\s」を追加しました。

「-?」はハイフンが0回か1回出現することを、「\s」はスペースが0回以上出現することを表します。

これにより、「123-4567」や「123 4567」、「1234567」など、さまざまな形式の郵便番号を正しく認識できるようになりました。

これで、Rubyの正規表現を使って郵便番号を検証する方法を学びました。

次に、この正規表現を使って郵便番号の自動修正をしてみましょう。

●郵便番号の自動修正

正規表現を使えば、不適切な形式の郵便番号を自動的に適切な形式に修正することも可能です。

これは、ユーザーが間違えて郵便番号を入力した場合や、形式が一貫していないデータを整形する際に非常に便利です。

次に、その基本的な使い方と応用例を見ていきましょう。

○サンプルコード3:郵便番号の自動修正の基本

まずは基本的な例から見ていきましょう。

次のコードでは、ハイフンがない郵便番号にハイフンを挿入して、正しい形式に修正するコードを紹介します。

def correct_zipcode(zipcode)
  corrected = zipcode.sub(/\A(\d{3})(\d{4})\z/, '\1-\2')
  return corrected
end

puts correct_zipcode('1234567')  # => "123-4567"

このコードでは、subメソッドと正規表現を使って郵便番号を修正しています。

subメソッドは、指定したパターンに一致する最初の部分を置換します。

ここでは、(\d{3})(\d{4})というパターンを指定し、3桁の数字と4桁の数字に分けています。

そして、置換する文字列として'\1-\2'を指定しています。

\1\2は、それぞれ最初と二番目の括弧で囲まれた部分に対応します。

したがって、このコードは「3桁の数字-4桁の数字」の形式に修正します。

さて、この基本的な例をもとに、さらに応用的な例を見てみましょう。

○サンプルコード4:自動修正の応用

次のコードでは、スペースやハイフンなど、さまざまな記号を含む郵便番号を正しい形式に修正します。

def correct_zipcode(zipcode)
  corrected = zipcode.gsub(/\D/, '').sub(/\A(\d{3})(\d{4})\z/, '\1-\2')
  return corrected
end

puts correct_zipcode('123 4567')  # => "123-4567"
puts correct_zipcode('123-4567')  # => "123-4567"
puts correct_zipcode('123--4567') # => "123-4567"
puts correct_zipcode('123a4567')  # => "123-4567"

このコードでは、まずgsubメソッドと\Dという正規表現を使って、数字以外のすべての文字を削除しています。

\Dは数字以外の任意の文字に一致するため、これにより郵便番号から余分な文字が全て取り除かれます。

その後、subメソッドを使ってハイフンを挿入し、正しい形式に修正します。

これで、Rubyの正規表現を使って郵便番号の自動修正を行う方法を学びました。しかし、この方法には注意が必要です。

次に、その注意点と対処法について見ていきましょう。

●注意点と対処法

Rubyで郵便番号の自動修正を行う際には、いくつかの注意点があります。

その一つは、郵便番号が正しい桁数でない場合の対処法です。

たとえば、次のコードは7桁の郵便番号を正しく修正できますが、それ以外の桁数の郵便番号に対しては、正しく動作しません。

def correct_zipcode(zipcode)
  corrected = zipcode.gsub(/\D/, '').sub(/\A(\d{3})(\d{4})\z/, '\1-\2')
  return corrected
end

このコードは、まずgsubメソッドで数字以外の文字をすべて削除し、その後subメソッドで7桁の郵便番号を3桁と4桁に分けてハイフンを挿入します。

しかし、郵便番号が7桁でない場合、例えば8桁や6桁の場合、このコードは正しく動作しません。

この問題を解決する一つの方法は、郵便番号が7桁でない場合にはエラーメッセージを出力することです。

次のコードは、その例を表しています。

def correct_zipcode(zipcode)
  zipcode = zipcode.gsub(/\D/, '')
  if zipcode.length != 7
    return "エラー: 郵便番号は7桁でなければなりません"
  end
  corrected = zipcode.sub(/\A(\d{3})(\d{4})\z/, '\1-\2')
  return corrected
end

puts correct_zipcode('12345678')  # => "エラー: 郵便番号は7桁でなければなりません"

このコードでは、gsubメソッドで数字以外の文字を削除した後、if文を使って郵便番号が7桁であるかどうかを確認します。

もし7桁でなければ、エラーメッセージを出力します。

このように、Rubyの正規表現を使って郵便番号の自動修正を行う際には、郵便番号が正しい桁数であることを確認することが重要です。

さらに、自分のニーズに合わせてコードをカスタマイズすることも可能です。

次に、その方法について見ていきましょう。

●カスタマイズ方法

Rubyでの郵便番号の自動修正は、さまざまなカスタマイズが可能です。

たとえば、郵便番号が正しくない場合にエラーメッセージを出力するだけでなく、ユーザーに正しい郵便番号を再入力するよう促すこともできます。

この場合、次のようなコードを作成できます。

def correct_zipcode(zipcode)
  zipcode = zipcode.gsub(/\D/, '')
  while zipcode.length != 7
    puts "エラー: 郵便番号は7桁でなければなりません"
    print "再度、正しい郵便番号を入力してください: "
    zipcode = gets.chomp.gsub(/\D/, '')
  end
  corrected = zipcode.sub(/\A(\d{3})(\d{4})\z/, '\1-\2')
  return corrected
end

puts correct_zipcode('12345678')

このコードは、まずgsubメソッドで数字以外の文字をすべて削除します。

その後、whileループを使って郵便番号が7桁であるかどうかを確認します。

もし7桁でなければ、エラーメッセージを出力し、ユーザーに正しい郵便番号の再入力を促します。

ユーザーが正しい郵便番号を入力すると、ループから抜け出し、郵便番号の自動修正を行います。

実行結果は次の通りです。

エラー: 郵便番号は7桁でなければなりません
再度、正しい郵便番号を入力してください: 1234567
=> "123-4567"

このように、Rubyの正規表現を使って郵便番号の自動修正を行う際には、あなたのニーズに合わせてコードをカスタマイズすることが可能です。

具体的なカスタマイズ例については、次のセクションで詳しく解説します。

まとめ

以上がRubyで郵便番号の正規表現と自動修正を行う方法についてのガイドです。

この記事を通じて、Rubyの正規表現を使って文字列を操作し、郵便番号の自動修正を行う基本的な知識を得ることができたことと思います。

私たちは、最初に正規表現の基本的な知識と、それがどのように文字列のパターンマッチングに使われるのかを学びました。

次に、Rubyでの正規表現の基本的な使い方と、それを使った簡単なコードの例を見ました。

そして、さらに進んで、Rubyの正規表現を使って郵便番号の自動修正を行うさまざまなコード例を探り、それらのコードがどのように動作するのかを詳しく学びました。

郵便番号の自動修正は、Webアプリケーション開発において非常に一般的な機能です。

このガイドを参考に、あなた自身のプロジェクトで郵便番号の自動修正を実装する際の助けになれば幸いです。

最後に、Rubyでの郵便番号の自動修正は、あなたのニーズに合わせてさまざまにカスタマイズできることを覚えておいてください。

Rubyの正規表現の力を最大限に活用して、ユーザー体験を向上させるためのツールとして使いましょう。

Rubyでの正規表現と郵便番号の自動修正について学び、その力を最大限に活用することで、あなたのプログラミングスキルは新たな次元に到達するでしょう。

次のステップへ進む準備ができたら、ぜひさらに深く掘り下げてみてください。

この記事がRubyでの正規表現を使った郵便番号の自動修正の学習に役立ったことを願っています。