2011-08-15 2 views
0

, 나는 알파벳, 숫자, 공백 및 다음과 같은 기호의 모든 편지를 허용 꿔! £ $ % & *() _ + [] :; @ ~ # <>? ,. -정규식 도움말 나는 사용자의 입력의 유효성을 검사하는 정규 표현식을 사용하기 위해 노력하고있어 식별 기호

나는 그게 내게 지옥을 혼란스럽게하기 때문에 정규 표현식으로 잘 된 적이 없다. 이게 내가 가진 최선이지만 올바르게 놓는다면 제대로 작동하지 않을거야? 현장에서 나는 오류를 받는다.

<?php 
    $title = $_POST['title']; 

    if (!preg_match('/\/^[a-zA-Z0-9\s!£$%&*()_+[\]:;@~#<>?,.-]+$\//m', $title)) { 
     $error = "Photo name contains unsafe characters."; 
     $solution = "<a href=\"javascript:history.go(-1)\">Try again?</a>"; 
    } 

    if ($error) { echo("$error"); 
?> 

왜 난 항상이 정규식 일이 잘못 무엇입니까 내가 이해하기 시작 해요 생각하면 그냥 나는 곧 내가 정말 아니에요 실현! : P

누구든지 나를 도울 수 있고 어쩌면 내 예제가 작동하지 않는 이유를 설명 할 수 있으므로 실수로 배울 수있어서 매우 감사하게 생각합니다. 감사합니다! 당신은^이전과 $ 후 몇 가지 추가 /

답변

1

,이 작업을해야합니다 :

preg_match('/^[a-zA-Z0-9\s!£$%&*()_+[\]:;@~#<>?,.-]+$/m', $title) 

또한 m 수정이 라인의 끝과 일치하고, 사람이 하나를 추가 할 수 있도록 $을 일으킬 것 첫 줄 뒤에 문자가 있으므로 제거해야합니다.

+0

아, 작동합니까! 고맙습니다! ! 그래서 m 수정과 나는 '/^[A-ZA-Z0-9 \의 £ $의 % & * (이 는 preg_match를 떠나 제거해야합니다() _ + [\] :; @ ~ # <>,?. -] + $/', $ title); ? 그리고 내가 왜 그 이유를 이해했는지 확인해보십시오. 텍스트 영역에 글을 쓰고 새 단락을 만든다면, $가 정규 표현식 검사를 중단 한 이후에 원하는 것을 삽입 할 수있는 첫 줄 이후에 m이 될 것입니다. 이 방법은 단 한 줄만 쓸 수있는 단일 텍스트 입력란을 계속 준수합니까? 단락/한 줄 이상을 말하도록 "해킹"할 수 있습니까? 미안, 내가 잘못 이해한다면, 여전히 배우기 :) – Joe

+1

첫 번째 질문은 그렇습니다. 'm'의 경우, 보통'$'는 문자열의 끝에 부합하기 때문에'/^... $ /'정규 표현식은 문자열 전체가 정규 표현식과 일치하는 경우에만 일치합니다. 그러나'm'을 사용하면'$ '는 줄 끝과 일치하므로 전체 문자열의 한 줄이 정규식과 일치하면'/^... $/m' 정규식이 일치합니다. – arnaud576875

+0

그래서 사용자 이름이나이 경우 업로드 된 사진의 제목을 확인하는 것과 같은 대부분의 경우 문자열을 확인하는 중 m은 필요하지 않습니다. 그리고 이것은/^ $/ – Joe

관련 문제