2010-05-20 3 views
3

Microsoft VBScript Regular Expressions 5.5 (JavaScript 정규 표현식과 동일해야 함)를 사용하는 VBA 코드에서 정규 표현식을 실행하려고합니다.이 정규 표현식 (VBScript/JavaScript flavor)의 문제점은 무엇입니까?

정규 표현식 : ^[0-9A-Z]?[0-9A-Z]{3}[A-Z]?([0-9A-Z]{6})-?([0-9])?$
입력 : X123A1234567
경기 : 123456

내가주고 관심있어 6 자 마지막 (체크) 숫자를 무시 123456의 좋은 경기. 완전한. (체크 디지트가 캡처되지만 중요한 문제는 아닙니다.)

그러나 둘 모두가 생략되면 ( 임) 일치 항목은 마지막 숫자를 가져옵니다.

GOOD :

입력 : 123123456 경기 : 123456

없음 알파, 아니 검사 숫자. 좋은 경기.

좋은

입력 : 123A1234567
경기 : 옵션 중간 알파에서 123456

휴가, 옵션 선도적 인 알파를 꺼내 검사 숫자에두고, 우리는 여전히 123456의 좋은 경기를 얻을.

좋은

입력 : X1231234567
경기 : 옵션 선도 알파에서 123456

휴가, 중간 선택적 알파를 꺼내 검사 숫자에두고, 우리는 여전히 123456의 좋은 경기를 얻을.

BAD

입력 : 1231234567
검색 : 234567

, 선택적 알파 BOTH를 꺼내 검사 숫자에두고, 우리는 234567의 나쁜 일치를 얻을.

정규 표현식 테스터를 http://www.regular-expressions.info/javascriptexample.html 또는 http://www.regular-expressions.info/vbscriptexample.html으로보십시오.

내가 무엇이 누락 되었습니까? 두 선택적 alphas가 누락 된 경우 정규 표현식에서 마지막 숫자를 무시하도록하려면 어떻게합니까? 정규 표현식은 조회 시스템에 입력하는 데 사용되므로 입력 데이터의 형식에 관계없이 완전한 값과 일치시킬 수 있습니다.

업데이트 : 위의 예제에는 하이픈 (정규식으로 표시)이 포함되어 있지 않습니다. 하이픈과 체크 숫자가있는 입력 데이터는 항상 일치합니다.

업데이트 : 아래 정규 제안 덕분에 작동합니다 (감사합니다!) :

정규 표현식이 : ^[A-Z]?[0-9]{3}[A-Z]?([0-9]{6})-?([0-9])?$

답변

2

임의의 선행 알파를 꺼내면 의 첫 번째 문자 클래스와 일치하며 전체 정규식이 일치하기 때문에 이유가 없습니다. 모든 마지막 숫자는 정규식에서 선택 사항입니다.

옵션으로 표시되지 않으므로 (일치하지 않으려는 경우) 후행 ?을 삭제하면 정규식이 작동합니다.

또는 정규식 [A-Z]?의 첫 번째 부분을 번호와 일치시키지 않도록하십시오. 규칙에 맞는 경우.

+0

나는 그것이 이것이라고 생각한다. 초기 선택 문자가 알파 또는 영숫자인지 확인해야합니다. –

+0

이것은 그 것이다. 사양은 다소 흐릿하지만, 알파 만 사용하는 경우 "문자"를 사용하고 숫자 만 사용하는 경우 "숫자"를 사용한다는 사실을 깨달았습니다. 수치는 의미가 있지만 charcter는 영숫자로 생각했습니다. –

1

당신이 정말로 마지막 자리를 원하지 않는 경우, 그것은 선택하지 않음 - $

+0

입력 데이터가 123123456 일 수 있으므로 선택 사항입니다. - "123456"을 좋아합니다. 이것을 명시 적으로하기 위해 질문을 업데이트 할 것입니다. 위의 예에서 마지막 숫자는 원하지 않습니다. "123456"이 대상입니다. "7"은 체크 숫자입니다. –

+0

나는이 문제를 해결하지 못했지만 내 질문을 명확하게했기 때문에이 응답을 upvoted. –

0

전에 마지막 ? 것을 꺼내 귀하의 정규식 정말 지나치게 복잡 . 욕심쟁이 검색을 사용하는 경우 처음에는 아무 것도하지 않아도됩니다. 필요한 것은 다음과 같습니다.

([0-9A-Z]{6})\d$ 

- ?.이 필요한지 확실하지 않습니다. 귀하의 입력 데이터 중 어느 것도 그것을 나타냅니다. (그러나 당신이 그것을 추가 할 수 있습니다)

또한 입력 데이터가 항상 동일한 길이라면 VB6이 substr에 해당합니다.

+0

원래 예제에서는 입력 데이터의 길이가 항상 같지 않다 (모든 alphas가 있음). , 일부 alphas 누락, 모든 alphas 누락). 또한 최종 수표 번호가 항상 표시되지는 않습니다 (누락 된 원본 예제가 없으며 게시 한 후에 추가 함). 그래서 substr은 좋은 후보가 아닙니다. –