2011-08-09 6 views
1

간단한 이메일 확인 스크립트가 계속 실패합니다.PHP 정규 표현식

if(!preg_match('^[^@]{1,63} @ [^@]{1,255}$', $input)) { 
    return false; 
} 

간단해야하며 '@'기호 하나만 입력하고 로컬 및 도메인 주소는 올바른 길이 여야합니다. 그러나 유효한 전자 메일은이 테스트를 통과하지 못합니다. error_log에는 '@'가 정의되지 않은 변수라는 메시지가 계속 나타납니다. 나는 그것을 피할 수 있을까요? 그들 앞에 백 슬래시를 넣는 것은 도움이되지 않았습니다.

미리 감사드립니다.

* 편집 : 이메일 검증 스크립트에 더 많은 내용이 있습니다. 게시물이 제대로 작동하지 않기 때문에 게시하지 않았습니다. 이것은 분명히 유일한 검증은 아니지만 오류가 계속 발생하는 유일한 방법입니다.

+0

가 왜'@ 주위에 공백이'? – rockerest

+1

이것은'! "$ $ %^& *() @!"$ $ %^& *()'에 대해서도 true를 반환합니다. 나쁜 시간. – adlawson

+0

공간은 눈을 편안하게 해줍니다. 실제 버전은 없습니다. 아마 그것을 추가해서는 안됩니다. – Renzo

답변

4

단순한 정규식을 사용하는 이메일의 유효성 검사가 실패합니다. 적절하게 PHP와 전자 메일 주소의 유효성을 검사의 길이를 통과이 문서 확인 :이 코멘트에서

http://www.linuxjournal.com/article/9585?page=0,0

을, 당신은 또한 (& 효과적인 간단한 것 같다 PHP의 filter_var 기능을 확인할 수 있습니다 그것은) 바퀴를 재발견하기 위해 거의 항상 더 나은 아니다 : 당신은 이메일 주소의 유효성을 검사하는 정규 표현식을 사용하지 말아야합니다

if(!filter_var($email, FILTER_VALIDATE_EMAIL)) 
{ 
exit("E-mail is not valid"); 
} 
+0

오, 알아. 그것은 검증의 한 부분 일 뿐이며 많은 다른 단계를 거쳐야합니다. 문제의 한 부분으로 오류가 계속 발생하며 이유를 파악할 수 없습니다. – Renzo

+0

그럼에도 불구하고 filter_var이 당신에게 속임수가되는지, PHP에 내장되어 있는지, 왜 이미 존재하고 작동하는지 확인하십시오. 프로젝트의 다른 부분에서 그 시간을 보낼 수 있습니다 :) –

+0

PHP 내부적으로 FILTER_VALIDATE_EMAIL이 실제로는 정규식이라는 것을 알고 있습니까? (최고의 btw가 아닙니다.) – mario

1

. 정말.

어쨌든, 문제는 preg_match 구문과 같습니다. 첫 번째 매개 변수는 / [...] / 인 패턴을 허용합니다. 여기서 /는 PCRE delimiters입니다.

그래서 전화는 다음과 같습니다

if(!preg_match('/^[^@]{1,63}@[^@]{1,255}$/', $input)) { 

하지만, 그런 식으로 사용하지 마십시오.

0

그들은 실패에 하나 0 또는 false를 반환하기 때문에 preg_match() 및 기타 preg_*() 기능, 에러가 발생하지 않을 경우 그렇게 간단한 신뢰할 수 없습니다 것을 중반에 보관하십시오.

CleanRegex 사용을 고려 :

if (pattern(('^[^@]{1,63}@[^@]{1,255}$')->matches($input)) 
{ 
    // Matches! :) 
}