2017-01-12 2 views
2

Я хочу удалить все символы в строке, не принадлежащей строке номера телефона. Первый символ может быть или не быть «+», а все остальные символы должны быть цифрами.Ruby gsub для удаления недопустимых символов в телефонном номере

У меня был gsub(/\D/, ''), но я хочу сохранить первый символ, если это «+» (или цифра, конечно). Затем я попробовал некоторое отрицание, но это неправильно, либо: gsub(/^(\+?(\d))/, '').

Как я могу игнорировать первый символ с регулярным выражением, если он «+»?

+0

Как насчет законных телефонных номеров, например «1-912-555-1212x2300» или «1-888-YOU-KNOW»? – tadman

+0

@tadman Возможно, мне нужно изменить название, но поведение, которое я описываю, - это поведение, которое я хочу. :) –

+0

@CarySwoveland «Первый символ может быть или не быть« + », а все остальные символы должны быть цифрами». Какая часть непонятна? –

ответ

5

Как об использовании отрицательного предпросмотра в начале:

gsub(/(?!^\+)\D*/, '') 

В принципе, выше регулярное выражение должно удалить любую серию нецифровых, где первый символ не один «+» символа в начале Струна.

Надеюсь, это поможет.

+0

Ницца, Лаутаро! –

0

Если вам не нужно делать это в одном gsub, может быть проще вытащить знак плюса отдельно. Вы можете использовать [] method, что-то вроде:

my_string[/^\+/].to_s + my_string.gsub(/\D/, '')

to_s является необходимым, так как этот метод будет возвращать nil если знак плюс не найден.

Смежные вопросы