2017-02-15 1 views
1

Я ищу, чтобы исправить следующие форматы или недопустимые форматы в ряд Рабочий телефон:Рубиновый регулярное выражение GSUB любые другие символы, кроме + на старте (номер телефона)

1 (639)-234-2323 => 6392342323 
2 (042)-982-2234 => 0429822234 
3 0974829-928 => 0974829928 
4 +83246-983-34 => +832459834 
5 +836(737)-898+78 => +83673789878 

Я могу использовать этот код и I может получить мои результаты правильно, если задано определенное 1-4, но если 5, я действительно схожу с ума.

row[1] = row[1].gsub('(','').gsub(')','').gsub('-','').gsub(' ','') 

Этот образец используется в файле импорта. Поэтому вы не можете ожидать приглашения пользователю.

Я также открыт, чтобы импортировать запись с недопустимым форматом, но должен быть просто отформатирован на принятый номер телефона (в скобках указаны любые где-либо или любые знаки +).

EDIT Я хочу получить решение для моего 5 данного примера. Так как я не могу удалить + знаков без удаления первого.

EDIT 2 я снова спросил в комментариях, что мне нужно включить такой формат телефона:

6 (+65)92349577 => +6592348577 

@ WiktorStribiżew предложил следующее регулярное выражение: s.gsub(/\A\(?(\+)|\D+/, '\1') от своего первоначального ответа (принятый один)

+1

Используйте 's.gsub (/ \ А (\ +) | \ D + /, '\ 1') ' –

+0

Извините, вопрос был обновлен .. Я хочу иметь решение для моего примера на' 5'. Поскольку я не могу удалить знаки '+' везде, не удаляя первый. – jck

+0

@ WiktorStribiżew Блестящий ответ .. Не могли бы вы ответить на сообщение, чтобы я мог принять ваше? Благодарим за быстрый ответ. – jck

ответ

3

решения захватить первый + и просто соответствует всем другим нецифровым символам:

s.gsub(/\A(\+)|\D+/, '\1') 

См детализирует regex demo

Pattern:

  • \A(\+) - это + (который захватывается в захвате группа № 1, так как она обернута с сохраняющими круглыми скобками) в начале строки (\A)
  • | - или
  • \D+ - один или несколько символов, кроме цифры.

\1 в замене является обратная ссылка на содержимое сохраненных в захвате группы # 1, он восстанавливает в результате замены первоначального +

+0

Зачем нужны символы par +? – akuhn

+0

@akuhn: Первое альтернативное значение ветки должен быть сохранен в конечном результате.Для того, чтобы вернуть этот текст в результат замены, значение должно быть сохранено в некотором слоте памяти, который создается с помощью группы захвата. '(...)' создает захват, и, таким образом, можно сохранить '+', который находится в начале строки. Мы сопоставляем и * фиксируем * то, что мы чтобы сохранить и просто соответствовать тому, что нам нужно удалить. –

+0

@ WiktorStribiżew Woah! Отличный ответ с объяснением. Спасибо! Я все еще изучаю эту проблему с регулярным выражением, и мне просто нужно иметь дело с текущей задачей, которую нужно выполнить. Большой! Спасибо! – jck

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