Formato de cadena con RegExp para configurar delimitador

Estoy tratando de formatear una cadena de la siguiente manera

Asegúrese de que todos los números usan guiones para delimitadores. Ejemplo: 480.01.4430 y 480014430 serían ambos 480-01-4430.

Esto es lo que he encontrado hasta ahora, pero no puedo entender por qué no funciona

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

Es extraño que no esté obteniendo una excepción: se requiere que el segundo argumento de gsub sea ​​una cadena (o algo que pueda convertirse en una cadena), no una expresión regular.

Aquí hay un ejemplo de trabajo:

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

Hay tres grupos de dígitos en la cadena original. Encerramos cada grupo entre paréntesis. Cada par de paréntesis crea un grupo de coincidencia . En la cadena de reemplazo, usamos \1 para incluir el primer grupo de coincidencias, \2 para incluir el segundo grupo de coincidencias y \3 para incluir el tercer grupo de coincidencias, con guiones entre ellos.

Si no le importa nada en la cadena, de lo que no es un dígito, puede quitar todo lo demás y formatear como desee:

 string.gsub(/\D/, '').gsub(/(\d{3})(\d{2})(\d{4})/, "\\1-\\2-\\3") 
    Intereting Posts