2013-05-09 3 views
1

정규식을 사용하여 파일 경로의 유효성을 검사하고 싶습니다. 내가 할 수 \ 문자열 AZ, AZ, 0-9, 점, 이외의 문자가있는 경우정규식에 대한 문자열 유효성 검사

preg_match('/[^A-Za-z0-9\.\/\\\\]/', $string); 

그래서 1을 반환하고

방법/

: 지금까지 나는이 함께 왔어요 문자열에 두 개 이상의 점이 있거나 문자열의 끝에 점이 있으면 1을 반환합니다.

그리고 어떻게하면 :을 허용 할 수 있습니까?하지만 두 번째 문자로 표시되고 그 뒤에 \ 또는 /이 오는 경우에만 허용 할 수 있습니다. 예를 c:\file를 들어 처음 두 요구 사항

+0

파일에 액세스하여 오류를 잡으십시오. 유효성 검사를하지 마십시오. – nhahtdh

답변

4

유효해야합니다 :

preg_match('/[^A-Za-z0-9\.\/\\\\]|\..*\.|\.$/', $string); 

\..*\. 두 개 이상의 도트가있는 경우 일치합니다. \.$은 끝에 점이 있으면 일치합니다. |으로이 부분 (원래 정규식 포함)을 분리하면 정규식이 표현식 중 하나와 일치하게됩니다 (이것을 교대라고 부름). 내가 제대로 이해한다면 당신은 :가있는 경우에만 콜론 두 번째 문자이며이 \ 또는 / a로 따라하지 않는 한이 1을 반환해야하기 때문에

마지막 요구 사항

은 조금 까다 롭습니다. (PHP는 문자열로) 다음 정규식은을 수행해야합니다

'/:(?!(?<=^[a-zA-Z]:)[\/\\\\])/' 

또는 다른 정규식 (우리는 또한 첫 번째 문자 클래스에 :을 추가 할 필요가 있습니다)와 결합 : 여기

preg_match('/[^A-Za-z0-9\.\/\\\\:]|\..*\.|\.$|:(?!(?<=^[a-zA-Z]:)[\/\\\\])/', $string); 

마지막 부분에 대한 설명입니다 :이 서버에서 파일을 경우

:     # match a ':' 
(?!    # but fail if the following regex matches (negative lookahead) 
    (?<=^[a-zA-Z]:) # the ':' was the second character in the string 
    [\/\\\\]   # the next character is a '/' or '\' 
)     # end lookahead 
+0

감사합니다! 마지막 부분은 작동하지 않는 것 같습니다. 이 표현식을 부정 할 수 있을까요?^[A-Za-z] : [\. \/\\\\]'? 그래서 일치하지 않으면 일치해야합니다. – Alex

+0

@Alex 제 편집 내용을보십시오. 이전 버전의 문제는 원래 정규 표현식의 문자 클래스에 추가해야하거나':'를 사용하면 정규 표현식이 시합. '(?! =^[a-zA-Z] :) [\/\\\\])'는 당신의 정규 표현식의 부정입니다. ('.'를 제외하고는 정말로 원하십니까? 'C : .test'가 유효합니까?). –

+0

아니요.하지만 실수로 목록에 점을 추가했습니다. 다시 감사드립니다. P – Alex

1

,이 realpath을위한 것입니다. 이 경우 ...에 대한 참조가 해결되고 해당 경로에 파일이 있는지 확인합니다. 파일이 존재하지 않으면 false를 반환하고, 존재하면 새로운 경로를 반환합니다.