필드 형식을 확인하기 위해 RegEx를 사용할 수있는 상용 응용 프로그램을 사용하고 있습니다. 일반적으로 이것은 꽤 잘 작동합니다. 그러나 오늘은 다음 문자열의 유효성 검사에 직면했습니다. 간단한 산술 연산자 (+ -/*)가있는 인용 영문 숫자 코드. 분명히 사용자가 공백을 추가하는 경우가 있습니다 (예 : 'FLR01'대신 ' FLR01'). 또는 하위 처리시 문제가되는 불일치 괄호와 같은 다른 오타가있을 수 있습니다.간단한 수학을 검증 할 수있는 정규식을 쓸 수 있습니까?
첫 번째 예는 모두 5 개 코드가 추가되고 있었다 :
"FLR01"+ "FLR02"+ "FLR03"+ "FMD01"+ "FMR05"
그래서 나는 일치의 길을가는 시작 문자열 인용 5 개 영숫자 :"[0-9A-ZA-Z] {5}"[+ - * /]
그러나, 공식 신속 열심히했고 나도 몰라 방법 다음과 같은 합병증을 피하십시오.
- 각 코드 사이에 네 개의 간단한 수학 연산자 (+ - * /) 중 하나를 테스트해야하지만 마지막 코드 이후는 테스트하지 않아도됩니다.
- 위의 예 에서처럼 5 개가 아닌 여러 개의 코드가 함께 추가 될 수 있습니다.
- 대괄호 괄호 ("X"+ "Y")/"2"
- 괄호가 맞지 않습니다.
- 수식이 없습니다 (예 : 공백). 괜찮습니다.
유효을 :
"FLR01"+"FLR02"+"FLR03"+"FMD01"+"FMR05"
"0XT"+"1SEAL"+"1XT"+"23LSL"+"23NBL"
("LS400"+"LT400")*"LC430"/("EL414"+"EL414R"+"LC407"+"LC407R"+"LC410"+"LC410R"+"LC420"+"LC420R")
잘못된 :
" FLR01" +"FLR02"
"FLR01"J"FLR02"
("FLR01"+"FLR02"
가 쉽게 정규식로 할 수있는이없는 것이 있습니까? 230517에 대한 Jeff의 답변을 바탕으로, 나는 적어도 "매치 된 페어링"문제에 실패했다고 생각합니다. 괄호 문제를 해결할 수 없더라도 문제의 부분적 해결책 (예 : 여분의 공백을 표시하거나 잘못된 연산자)을 사용하는 것보다 더 나은 방법이 될 수 있습니다. 제안이 환영되었습니다!
감사합니다,
당신이 정규 표현식에 괄호 일치를 확인할 수 없습니다 알다시피
구문 분석 문법을 살펴보십시오. BNF, _inspiration_을위한 yacc/lex 도구. – mctylr
불행히도 이것은 선택적 속성 유효성 검사 옵션으로 regex가있는 상용 응용 프로그램입니다. StackOverflow 포드 캐스트를 듣고 이것에 대한 Joel/Jeff의 토론을 회상하겠습니다.하지만이 예제에서는 응용 프로그램 외부의 프로그래밍 방식 솔루션에 대한 정규 표현식의 부분적인 솔루션을 선호합니다. 궁극적으로 그 일이 올 수도 있지만, 나는 지금 당장 보류하고 싶습니다. –