3

次のように文字列をフォーマットしようとしています

すべての数字が区切り文字にダッシュを使用していることを確認してください。例: 480.01.4430 と 480014430 は両方とも 480-01-4430 になります。

これは私がこれまでに思いついたものですが、なぜ機能しないのか理解できません

def format_ssns(string)
  ssn = string[/\d{9}/]
  ssn.gsub(/\d{9}/, /\d{3}-\d{2}-\d{4}/)
end
4

2 に答える 2

6

例外が発生しないのは奇妙です: gsubの 2 番目の引数は、正規表現ではなく、文字列 (または文字列に変換できるもの) である必要があります。

これが実際の例です:

ssn = '123456789'
ssn.gsub(/(\d{3})(\d{2})(\d{3})/, '\1-\2-\3')
# => "123-45-6789"

元の文字列には 3 つのグループの数字があります。各グループを括弧で囲みます。括弧の各ペアによって、一致グループが作成されます。置換文字列で\1は、最初の一致グループ\2を含め、2 番目の一致グループ\3を含め、3 番目の一致グループを含めるために、それらの間にダッシュを使用します。

于 2013-03-15T03:56:44.810 に答える
2

数字以外の文字列を気にしない場合は、他のすべてを削除して、必要に応じてフォーマットできます。

string.gsub(/\D/, '').gsub(/(\d{3})(\d{2})(\d{4})/, "\\1-\\2-\\3")
于 2013-03-15T03:56:45.627 に答える