<input type="text" placeholder="Русские буквы" pattern="[А-Яа-яЁё ]+" name="name" value=""> имя должно быть на русских буквах, думал это их остановит нет всеравно регаются с инглиш символами в имени. как так и как пофиксить?
Вот вроде все ок работает, но проблема в том что если пользователь не нажимал в поле ИМЯ то любые проверки игнорятся. Как пофиксить? PHP: <?php /** * Модель: Registration * * Класс Models_Registration реализует логику регистрации новых пользователей. * - Проверяет корректность введенных данных в форме регистрации; * - Регистрирует нового пользователя, заносит данные в базу сайта; * * @author Авдеев Марк <mark-avdeev@mail.ru> * @package moguta.cms * @subpackage Model */ class Models_Registration { /** * Проверяет корректность введенных данных в форме регистрации. * * @param array $userData массив данных пользователя. * @param string $mode режим проверки данных (full|pass) полный (по умолчанию) или только пароль. * @return string ошибка в случае не верного ввода данных в одном из полей. */ public function validDataForm($userData, $mode = 'full') { global $passtmp; // Проверка электронного адреса. if (USER::getUserInfoByEmail($userData['email']) && 'full' == $mode) { $error .= '<span class="email-in-use">Указанный email уже используется</span>'; } // Проверка Имени на английские буквы if ((!preg_match('/^[а-яё\s]++$/ui',$userData['name'])) or (strlen($userData['name']))<3) { $error .= '<span class="email-in-use">Имя должно состоять из Русских букв и более одного символа.</span>'; } // Пароль должен быть больше 5-ти символов. if (strlen($userData['pass']) < 5) { $error .= '<span class="passError">Пароль менее 5 символов</span>'; } // Проверяем равенство введенных паролей. if (URL::getQueryParametr('pass2') != $userData['pass']) { $error .= '<span class="wrong-pass">Введенные пароли не совпадают</span>'; } $passtmp = $userData['pass']; if ('full' == $mode) { // Проверка электронного адреса. if (!preg_match('/^[-._a-zA-Z0-9]+@(?:[a-zA-Z0-9][-a-zA-Z0-9]{0,61}+\.)+[a-zA-Z]{2,6}$/', $userData['email'])) { $error .= '<span class="errorEmail">Неверно заполнено email</span>'; } /////////////////////Капчап if(MG::getSetting('useCaptcha')=="true"){ // ваш секретный ключ $secret = "6Ld-uXUaAAAAAJKIqUcQa8ySq4x0slHZ4tQpIhmJ"; // пустой ответ $response = null; include('mg-core/lib/recaptchalib.php'); // проверка секретного ключа $reCaptcha = new ReCaptcha($secret); if ($_POST["g-recaptcha-response"]) { $response = $reCaptcha->verifyResponse( $_SERVER["REMOTE_ADDR"], $_POST["g-recaptcha-response"] ); } if ($response == null || !$response->success) { $error .= "Recapctha не пройдена"; $data['error'] = $error; } } ///////////////////////// } $args = func_get_args(); return MG::createHook(__CLASS__."_".__FUNCTION__, $error, $args); } } HTML: <div class="create-user-account-form"> <?php if($data['form']): ?> <!-- <h2>Новый пользователь</h2>--> <form action="<?php echo SITE ?>/registration" method="POST"> <ul class="form-list"> <li>Email:<span class="red-star">*</span></li> <li><input type = "text" placeholder = "" maxlength="30" name = "email" value = "<?php echo $_POST['email'] ?>"></li> <li>Иногда письма приходят в спам папку!</li></br> <li>Пароль:<span class="red-star">*</span></li> <li><input type="password" name="pass"></li> <li>Подтвердите пароль:<span class="red-star">*</span></li> <li><input type="password" name="pass2"></li> <li>Имя:</li> <li><input type="text" placeholder= "Русские буквы" name="name" value = "<?php echo $_POST['name'] ?>"></li> <li><input type="hidden" name="ip" value = "<?php echo $_SERVER['REMOTE_ADDR'] ?>"></li> <?php if(MG::getSetting('useCaptcha')=="true"){ ?> <!--гугл капча--> <div class="g-recaptcha" data-sitekey="6Ld-uXUaAAAAAA3123аZWAzDpcJzs8ANU0E0lQ9"></div> <?php } ?> </ul> <button type = "submit" name="registration" class="register-btn default-btn">Зарегистрироваться</button> </form>
Атрибут required добавьте полю, но от ботов это не поможет, html5-атрибуты -- проверка на стороне клиента (браузером, в общем), боты могут пакостить прямо на сервер.