2013-03-25 5 views
4

정규 표현식에 몇 가지 문제가 있습니다. 버스 번호를 입력 할 때 사용자 입력의 유효성을 검사하고 싶습니다.'/'문자의 유효성을 검사 할 때 정규 표현식 문제

예 37, 37A, 37S, 37A/L, 16A/250, 16A/250K 등

I 해낸 정규식 그것은 37, 37A, 37S를 검증

(^\d{1,3}[A-Z]{0,3})|(^[\d{1,3}[A-Z]{0,3}\/\d{0,3}[A-Z]{0,3}]) 

인 그러나 37A/L을 검증 할 때 실패합니다. 누군가 내가이 문제로 어디로 잘못 가고 있는지 말해 줄 수 있습니까?

참고 : 텍스트 상자에 정규식 유효성 검사기를 사용하고 있습니다. 이것을 ValidationExpression에 두었습니다.

+0

대부분의 경우에 'OR'정규 표현식의 첫 번째 부분은 일치되고 두 번째는 폐기하는 것이 - 또한 마지막 – Charleh

+0

에 추가 대괄호가 이것은 C# @Nolonar에서만 존재합니까? 왜냐하면 다른 언어들에서는 전 슬래시를 벗어나야한다는 것을 알고 있기 때문입니다. – Simon

+0

@ 시몬 죄송합니다, 제 잘못. 나는'@ "대신에"\/"를 사용했다. 그게 내 디버거가 불평 한 이유입니다. 방금'@ "\ /"'로 테스트했고 제대로 작동합니다. 나는 이전의 코멘트를 삭제했다. C#에서는 슬래시를 벗어날 필요가 없습니다. (하지만 여전히 유효합니다.) – Nolonar

답변

2

문자열의 끝이 지정되지 않았으므로 문제가있었습니다. 이 도움이

이 교체

,

(^\d{1,3}[A-Z]{0,3}$)|(^\d{1,3}[A-Z]{0,3}\/\d{0,3}[A-Z]{0,3}$) 

희망.

2

당신은 다음과 같은 시도 / 문자를 이스케이프 할 필요가 없습니다 :

(^\d{1,3}[A-Z]{0,3}(?:/\d{0,3}[A-Z]{0,3})?) 

당신은 또한 전체 라인이 EOS 문자를 지정하여 정규식 일치하는지 적용 할 수 있습니다 :

(^\d{1,3}[A-Z]{0,3}(?:/\d{0,3}[A-Z]{0,3})?$) 

NB @MaxwellTroyMiltonKing이 주석에서 전체 정규식 주위의 괄호는 불필요하다고 지적 했으므로 :

^\d{1,3}[A-Z]{0,3}(?:/\d{0,3}[A-Z]{0,3})?$ 
+0

+1 슬래시 뒤의 두 번째 부분은 선택 사항으로 보이므로이 내용이 나에게 더 이해가됩니다. – ziya

+0

BTW, 왜 전체 식을 괄호로 묶어야합니까? – ziya

+0

@MaxwellTroyMiltonKing OP가 두 번째 그룹, 예를 들어'groups [1]'을 참조하고있는 경우를 대비하여. 그것은 물론 중복입니다 - 나는 그에 따라 내 대답을 업데이 트했습니다 –

0

이 시도 : 당신이 지정되어 있기 때문에 것을

^(\d{1,3}[A-Z]{0,3})(\/\d{0,3}[A-Z]{0,3})?$