Странная работа preg_match PHP 5.6

181
16 июля 2017, 12:30

Делаю регистрацию. Написал шаблоны для имени, фамилии и т.д. с помощью регулярных выражений. Делаю простую конструкцию:

<?php

$name = "Іван";
$surname = "Петренко";
$email = "petrenko@gmail.com";
$pass = "ivan123";
if (preg_match("/^([a-z0-9_\.-]+)@([a-z0-9_\.-]+)\.([a-z\.]{2,6})$/", $email)){
    if (preg_match("/^[А-ЯІЇ]{1}[а-яії]{2,11}$/", $name)){
        if (preg_match("/^[А-ЯІЇ]{1}[а-яії]{2,11}$/", $surname)){
            if (preg_match("([A-z0-9-_]{6,25})", $pass)){
              // здесь дальнейшие действия с регистрацией
            }
            else echo "Pass error";
        }
        else echo "Surname error";
    }
    else echo "Name error";
}
else echo "Email error";
?>

И при таком раскладе оно мне выводит "Name error", хотя как мы видим, что имя проходит по шаблону.

Подскажите, пожалуйста, что не так и как исправить. И правильно ли я делаю логику для регистрации?

Answer 1

Вы как бы работаете с кодировкой UTF-8, соответственно в регулярных выражениях следует указывать модификатор u для их правильного функционирования:

/^[А-ЯІЇ][а-яії]{2,11}$/u

И последняя регулярка у вас не регулярку

/([a-z0-9_-]{6,25})/i

P.S. Но такое ограничение на имена, фамилии, пароли, да и email есть зло!

READ ALSO
Помогите решить задачу по СИ [требует правки]

Помогите решить задачу по СИ [требует правки]

Даны строки A и BЕсли в A есть повторяющиеся символы, а в B нет повторяю- щихся символов, то упорядочить символы B в алфавитном порядке и удалить...

261
Ошибка в CMake в CLion с подключением библиотеки

Ошибка в CMake в CLion с подключением библиотеки

Не удается подключить библиотеку zlib к проекту

316
Заполнить нулями без memset и ZeroMemory (C++)

Заполнить нулями без memset и ZeroMemory (C++)

Добрый вечер! Необходимо реализовать полностью без CRT

307
Проблемы с Visual Studio

Проблемы с Visual Studio

Учился раньше на NetBeansРешил попробовать один из самых известных компиляторов

333