判定パターン
郵便番号(String型)とみなす文字列のパターンは下記の2パターンとします。
- "390-1401" (3桁-4桁記法)
- "3901401" (7桁記法)
matchメソッドを使って出力される結果は次の通りです。
"郵便番号らしき".match() "390-1401".match() # => #<MatchData> "3901401".match() # => #<MatchData> "390-140a".match() # => nil "390140".match() # => nil "3900-1401".match() # => nil
郵便番号判定
郵便番号を判定はどのように行えばよいでしょうか。
特徴としては数字3桁-数字4桁の組み合わせであるということです。
数字の判定はこちらの記述でいけますね。
/\d{3}/ # 数字1桁へのマッチを3回繰り返す /\d{4}/ # 数字1桁へのマッチを4回繰り返す
組み合わせると
/\d{3}-\d{4}/ # 数字3桁と数字4桁の間にハイフンがある文字列へマッチ "390-1401".match(/\d{3}-\d{4}/) # => #<MatchData "390-1401">
ただしこの記述では文字列にハイフンがないと、桁数が合っていない場合に対応できません。
そこで先頭数字3文字、最後数字4文字で終わるように指定しましょう。
/\A/d{3}/ # 数字3文字で始まる文字列にマッチ /\d{4}\z/ # 数字4文字で終わる文字列にマッチ
これらを使って記述すると次の通りです。
/\A\d{3}-?d{4}\z/ # 郵便番号に完全一致する文字列にマッチ "3900-1401".match(/\A\d{3}-?\d{4}\z/) # => nil
これで完全一致の判定ができるようになりました。