2013-10-30 2 views
0

PHP를 통해 내 사이트에 업로드되는 모든 파일의 유효성을 검사하고 싶습니다. 파일 내용을 비교하기 위해 정규 표현식을 사용하고 있지만 제대로 작동하지 않을 것으로 예상됩니다. 한 줄에 한 학기 만 사용하는 파일을 허용하고 싶습니다. 이것이 내가 그것을 원하는 방식으로 감지되지 않는 이유PHP : 배열 요소에서 정확한 문자열 패턴 검색

$texthandle = file($_FILES["textfile"]["tmp_name"]); 
foreach ($texthandle as $textline) 
{ 
    if (!preg_match("/(HP\d+){1}/", $textline)) 
    { 
    echo "Incorrect file format. Please provide a text file with 1 term per line."; 
      exit(0); 
    }  
} 

누군가가 제안 수 : 여기

EXPECTED INPUT: 
HP34930 
HP09099 
HP98899 

UNACCEPTABLE INPUT: 
HP89980 HP98798 HP09232 
some other text 
HP58089 

내 코드?

또한

if (!preg_match("/^(HP\d+){1}$/", $textline)) 

을 시도했지만 내가이 일을 예상대로 작동하지 않습니다.

도움 주셔서 감사합니다. 다음

$texthandle = file($_FILES["textfile"]["tmp_name"], FILE_IGNORE_NEW_LINES); 

과 :

if (!preg_match("/^HP\d+$/", $textline)) 

또는 허용 된 5 자리가있는 경우 :이 경우

if (!preg_match("/^HP[\d]{5}$/", $textline)) 

가 작동하지만 노력하지 어떤

+0

"작동하지 않습니다."적절한 문제 설명이 아닙니다. 뿐만 아니라 "제대로 작동하지 않습니다". 오직 당신이 "정확하게"무엇을 의미하는지 알 것입니다. – zerkms

+0

덜 모호하게 편집했습니다. 도움이되기를 바랍니다. – zock

+0

코드를 가져 와서 ** 작동 ** ** http://ideone.com/I1sRLt – zerkms

답변

1

확실하지 않음 공백, 탭 등의 끝에있는 공백은 모두 실패하므로 $ textline에 trim()을 시도 할 수 있습니다.

+0

당신의 정규 표현식은 OP의 것과 같습니다. (동작에 따라) – zerkms

+0

차이점은'^'와'$'문자입니다; 이들은 라인의 시작과 끝을 각각 확인합니다. –

+0

@Ed Cottrell : 두 번째 OP의 시도에서 앵커가 있습니다. – zerkms