2013-10-20 3 views
-1

예를 들어 입력을받는 api가 있습니다. 이상적 공백을 만들지 않고 문자열의 특정 문자를 제거하는 방법

@message.to = params[:to]

는 전화 번호 등을 입력 "256773485930" 같이 전송해야한다. 그러나 일부 사용자는 내가 @message.to = params[:to].gsub("+", "")를 사용하여 시도 "+256773485930"

같은 번호를 전송하는 것을 선호하지만 새로운 캐릭터에 공간을 추가이

" 256773485930" 

처럼 입력을 만들 수 있습니다. 문자열 앞에 공백을 추가하지 않고 +을 제거하려면 어떻게합니까?

+0

숫자가 아닌 문자를 모두 제거하지 않는 이유는 무엇입니까? 's.gsub (/ \ D /, '')' –

+1

문이 잘못되었습니다. ' "+256773485930".gsub ("+", "")'는 "256773485930"을 반환하지 않습니다. – sawa

+0

그게 그것이 내가 배치 된 URL에 공간을 만들었 기 때문에 내가 그 오류로 얻은 것이다. – acacia

답변

1

이 작동해야하지만 입력 문자열에도 앞쪽에 공백이 있으므로 params[:to].strip.gsub("+", "") 문자열 앞뒤의 공백이 제거됩니다. 이 자리 유지하려면 더 강력한

params[:to].gsub(/[^\d]/,"")

+0

감사합니다. – acacia

0

당신은 RegexpString#[]을 사용할 수 있습니다하십시오 Regexp이 공급되는

경우, 문자열의 일치하는 부분이 반환됩니다.

예 :

"+256773485930"[/\d+/] #=> "256773485930" 
0

이것은 일반적인 문제입니다. 구글 오픈은 얼마 전까지 libphonenumber의 소스 코드를 사용하여 여러 형식의 전화 번호를 구문 분석 한 다음 다시 다른 표준 형식으로 출력 할 수있었습니다. 라이브러리는 Ruby Gem named global_phone으로 이식되었습니다. 이 젬을 사용하는 것이 좋습니다. 왜냐하면 우리가 생각하지도 않는 수많은 엣지 케이스를 처리하기 때문입니다. 사용 예 :

require 'global_phone' 
GlobalPhone.db_path = 'global_phone.json' # see Github page for more info 

# somewhere else 
@message.to = GlobalPhone.normalize(params[:to]) 

전화 번호는 모든 숫자를 표준화 된 E.164 국제 문자열 형식으로 변환합니다. 이것은 변환 된 전화 번호가 실제로 +으로 시작한다는 것을 의미하지만, 이는 전화 번호를 저장하는 "올바른"표준 방법입니다.

관련 문제