2017-02-16 22 views
1

Я пытаюсь выполнить некоторое предварительное совпадение, чтобы сделать мой скрипт более безопасным, но что бы я ни вводил в имя пользователя/реальное имя, я получаю ошибку ... где я здесь не так?preg match для регистрационного скрипта 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 я хочу, чтобы позволить-ö 0-9 -_ и rnpreg а-орто - и пространство

EDIT: если я удалить (filter_var($empreg, FILTER_SANITIZE_EMAIL)) это работает ... как я implemend что, не нарушая его?

+1

Почему одинарные кавычки и запятая в ''/[^ \ p {L} \ p {N} _ \ - \.] +/Iu ',' "'? Используйте только ''/[^ \ p {L} \ p {N} _.-] +/iu "' –

+0

@ WiktorStribiżew okey, танки, но у меня все еще такая же проблема, я боюсь –

+1

'filter_var' в вашем случае не возвращает логическое, просто очищенное письмо. Вы, должно быть, хотели «FILTER_VALIDATE_EMAIL» –

ответ

1

',' в первом регулярном выражении являются ошибками и должны быть удалены. Затем вам нужно использовать FILTER_SANITIZE_EMAIL, в то время как вам нужно FILTER_VALIDATE_EMAIL до Подтвердить письмо. И вам нужно отрицать filter_var, так как вы следуете за отрицательными логиками в своем if.

Использование

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

Таким образом, будет возвращена ошибка, если [^\p{L}\p{N}_.-]+ шаблон найден, или адрес электронной почты не является действительным, или если [^\p{L}\s]+ образец сопоставляется.