2011-02-02 4 views
0

나는 DD-mm-yyyy 형식 일/월/년의 날짜 필드를 검증 '과'이 문자열을 사용하고 있습니다 :날짜 확인 알 수없는 수정 오류

'/^(0?[1-9]|[12][0-9]|3[01])[\/\.- ](0?[1-9]|1[0-2])[\/\.- ](19|20)\d{2}$/' 

그러나 나는이 오류를 얻을

경고 : preg_match() [function.preg-match] : 102 행의 /var/www/...fields_lib.php에있는 '\'알 수없는 수정 자

위의 문자열은 웹에 입력됩니다 응용 프로그램 옵션 유효성 검사 양식 필드 delimeter없이 양식을 포함하는 생각하기 때문에. 정수 및 소수와 같은 다른 유효성 검사 유형의 경우이 특정 양식에서 유효성 검사를 수행하기 위해 구분 기호를 제거해야했습니다.

아이디어가 있으십니까?

은 정규식 [/. -] (일부) 읽어야한다, 그래서 당신은

답변

1

내가 그 오류가 발생하지 않는가. 대신 내가 얻을 "오류, @CanSpice가 준 이유로 다른 문자를 얻으려면 문자 클래스의 첫 번째 백 슬래시 ([\/\.- ] 대신 [/\.- ])를 제거해야합니다. 그런 다음 /을 정규식 구분 기호로 해석하고 다음 문자가 수정 자 (여러위한 대소 문자 구별 또는 m위한 i 등).

012,351

따라서 두 가지 문제가 있습니다. -은 범위 연산자로 취급되고 /은 정규식 구분 기호로 취급됩니다. 문제가되는 문자를 백 슬래시 (즉, [\/.\- ])로 이스케이프 처리하여 두 가지 문제를 처리 할 수 ​​있지만 각 문제는보다 세련된 해결책을 제공합니다. -을 범위를 형성 할 수없는 첫 번째 또는 마지막 위치로 이동하면 리터럴 -으로 처리됩니다. /에 대해서는 정규식 구분 기호로 다른 것을 사용할 수 있습니다. 예를 들면 :

'~^(0?[1-9]|[12][0-9]|3[01])[/. -](0?[1-9]|1[0-2])[/. -](19|20)\d{2}$~' 

참고로, 필요하지 결코 . 전혀 이스케이프합니다. 문자 클래스에서 대부분의 정규식 메타 문자는 특별한 의미를 잃습니다. 방금 두 가지 특별한 경우에 맞닥 뜨리게 된 것입니다. :/

+0

게시 한 문자열로 이제 작동 중이고 입력란 유효성 검사 중입니다. 많은 감사. – Mkgl

2

당신은 문자 클래스에서 백 슬래시가 필요하지 않습니다 감사합니다. 또한 [.- ]는 것으로 해석 될 수 있기 때문에 공간과 대시, 공간을 전환 한 참고; "순서가 범위". 사이의 모든 문자

관련 문제