2017-02-16 4 views
1

내 preg 매치를 해보고 내 스크립트를 더욱 안전하게 만들려고하는데, 내가 username/realname을 입력 할 때마다 오류가 발생합니다 ... 내가 여기서 잘못 가고있는 곳은 어디입니까?preg 일치하는 등록 스크립트 php

 $unpreg = $_POST["username"]; 
     $empreg = $_POST["email"]; 
     $rnpreg = $_POST["realname"]; 

     $error = false; 
     if(preg_match("/[^\p{L}\p{N}_\-\.]+/iu','",$unpreg) || (filter_var($empreg, FILTER_SANITIZE_EMAIL)) || (preg_match("/[^\p{L}\s]+/u",$rnpreg))) { 

      $error = true; 
     } 
     if(!$error) { 

      $sql = "INSERT INTO Users (UserName, Email, Password,Real_Name) VALUES (:username, :email, :password, :realname)"; 
      $stmt = $conn->prepare($sql); 

      $stmt->bindParam(':username',$unpreg); 
      $stmt->bindParam(':realname',$rnpreg); 
      $stmt->bindParam(':email', $empreg); 
      $stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT)); 
      $stmt->execute(); 

      $message = 'Successfully created new user'; 

     } 
     else { 

      $message = 'Error, Something went wrong.'; 
     } 

는 기본적으로 unpreg에 나는-O를 허용 할 0-9 -_과-O rnpreg을위한 - 공간

편집 : (filter_var($empreg, FILTER_SANITIZE_EMAIL))를 제거하면 작동을 ... 어떻게 implemend 할 그걸 깨뜨리지 않고?

+1

/[^ \ p {L} \ p {N} _ \ - \.] +/iu ',' "'에 작은 따옴표와 쉼표가있는 이유는 무엇입니까? –

+0

@ WiktorStribiżew, tanks 부울 값, 그냥 정리 된 이메일을 반환합니다. 'FILTER_VALIDATE_EMAIL'을 원했음에 틀림 없음 –

+1

'filter_var'는 당신의 경우에''/ '를 사용하십시오.'/ '^'{\} {\ {L} \ p {N} _.-] +/iu " –

답변

1

첫 번째 정규식의 ','은 오류이므로 제거해야합니다. 그런 다음 FILTER_SANITIZE_EMAIL을 사용하고 FILTER_VALIDATE_EMAIL에서 까지의 이메일을 확인해야합니다. if에서 부정 논리를 따르기 때문에 filter_var을 무효화해야합니다.

사용

[^\p{L}\p{N}_.-]+ 패턴이 발견되면
if(preg_match("/[^\p{L}\p{N}_.-]+/iu",$unpreg) || !filter_var($empreg, FILTER_VALIDATE_EMAIL) || preg_match("/[^\p{L}\s]+/u",$rnpreg)) 

그래서, 오류가 반환됩니다, 또는 [^\p{L}\s]+ 패턴이 일치하는 경우 이메일이 유효하지 않거나.