2012-06-28 6 views
1

대시와 숫자 만 허용하는 정규식이란 무엇입니까?대시와 숫자 만 허용하는 정규식?

좋은 예는 전화 번호에서 사용하는 것입니다. 예 : 555-555-555, 12-2314-425.

나는 과 같은 항목을 원하지 않지만, 현재 -34--53-343은 괜찮습니다.

+2

RegEx에는 메모리가 없으므로 모든 스팟을 하나씩 가져올 수 있다면 대시 중에 숫자가 표시 될 수 있습니다. – TheZ

+1

@TheZ Ruby와 다른 동적 언어 regexp는 분명히 [그들이 backreferences를 지원함] (http://www.ruby-doc.org/core-1.9.3/Regexp.html#label-Capturing)과 같은 "기억을 가지고 있습니다". 하나는 "메모리"정규식을이 질문의 원하는 행동을 일치하게 만들 필요가 없습니다, 내 대답은 아래 참조하십시오. – dbenhur

답변

6

그래서 명시된 바와 같이 문제, 당신은 적어도 하나 개의 숫자를 원하지만 다른 어떤 0-9 또는 대시. 당신은, 당신은 아마 원하는 선택적으로 하나의 대시로 구분 된 숫자의 시퀀스를 인식 뭔가를 전화 번호를 인식하려는 경우

/^[\d-]*\d[\d-]*$/ 

%w{555-555-555 12-2314-425 -34--53-343 -------------}.each{|s| puts "#{s} #{s.match(/^[\d-]*\d[\d-]*$/) ? 'does' : 'does not'} match"} 

555-555-555 does match 
12-2314-425 does match 
-34--53-343 does match 
------------- does not match 

, 대신이 시도 :

/^\d+(?:-\d+)*$/ 

어느 제외 선행 또는 대시 후행하고 대시가 두 번 나타납니다.

+0

+1 : 내 대답을 삭제했습니다. '\ d'를 사용한다는 것을 제외하고는 이것과 동일하다는 것을 깨달았습니다. 귀하의 작업을보기 위해 [링크] (http://rubular.com/r/IX1r3vaH9N)가 있습니다. – Windle

+0

글쎄 대시도 사용하지 않기로 결정했다면. 나는 그것을 말하는 더 정확한 방법을 추측한다, 그들은 단지 숫자 나 대시를 가질 수있다. – LearningRoR

3

은 루비를 몰라,하지만 난 정규식은 가정

/^[0-9]([0-9]|-(?!-))+$/ 
  1. 시작을 숫자로,
  2. 숫자 또는 대시가 선행되지 대시 하였다. 가능한 여러 번 (555-54-456이 유효 555--54-456이 아닌)
+0

그의 예시 용납 가능한 문자열 중 하나가 대시로 시작합니다. – dbenhur

+0

네,하지만 저는 지금 당장 '영업 이익'을 상정 했었습니다. 나는 영업 이익을 의미한다고 생각 했었습니다 :이 시점에서 잡으려고 좋았지 만 아직까지는 꼭 필요한 것은 아닙니다 .'_ 이 전화 번호는 시작 대시 또는 반복 대시로 사용합니까? 나는 추상적 인 경우보다는 전화 번호로 대답하려고 노력했다. – Wrikken

관련 문제