Валидация Пароля и Email
Здравствуйте. Не получается написать работающую проверку пароля и email. Задача состоит в том, когда заполнил форму, я нажимаю кнопку submit (мне выдаёт ошибки если есть, если нет то переход на другую страницу). Помогите пожалуйста заранее спасибо.
Вот то что получилось написать. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Регистрация</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="style.css" type="text/css" media="screen" /> <script type="text/javascript" src="http://code.jquery.com/jquery-2.0.0.min.js"></script> <script type="text/javascript"> function checkPasswords() { var passl = document.getElementByid("passwordl"); var pass2 = document.getElementByid("password2"); if(passl.value!=pass2.value) passl.setCustomValidity("Пароли не совпадают. Пожалуйста, проверьте идентичность паролей в обоих полях!"); else passl.setCustomValidity(""); } function checkmail(value) { reg = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/; if (!value.match(reg)) {alert("Пожалуйста, введите свой настоящий e-mail"); document.getElementById('email').value=""; return false; } } </script> </head> <body> <div id="content"> <form action="3.html" id="jform" method="post"> <fieldset> <legend>Регистрация</legend> <p> <label for="firsname" class="block">Имя:</label> <input type="text" name="firsname" id="firsname" /> </p> <p> <label for="lastname" class="block">Фамилия:</label> <input type="text" name="lastname" id="lastname" /> </p> <p> <label for="passwordl" class="block">Пароль:</label> <input type="Password" id="passwordl" onchange="checkPasswords()"/> </p> <p> <label for="password2" class="block">Повторение пароля:</label> <input type="Password" name="Password2" id="password2" onchange="checkPasswords()"/> </p> <p> <label for="birthday" class="block">Дата рождения<small>(дд-мм-гггг)</small>:</label> <input type="text" name="birthday" id="birthday" /> </p> <p> <label for="email" class="block">Email <small>Например(Ivanov@gmail.com)</small>:</label> <input type="text" name="email" id="email"/> </p> <p> <label for="email" class="block">Ваш пол:</label> <label for="Men" class="block">Мужчина</label> <input type="radio" name="se" id="Men" value="Male"/> <label for="woman" class="block">Женщина</label> <input type="radio" name="se" id="woman" value="Female"/> </p> <p> <label for="email" class="block">Хобби</label> </p> <select> <optgroup Label ="General hooby"> <option value="playing">Playing</option> <option value="music">Music </option> </optgroup> <optgroup Label ="Educational hobby"> <option value="stamp collection">Stamp Collection</option> <option value="reading">Reading</option> </optgroup> </select> </fieldset> <p> <form action="#" method=post onSubmit="return checkmail(this.email.value)"> <button type="submit" id="send">Подтвердить</button> </form> </p> <p> <button type="reset" id="send">Очистить</button> </p> </form> </div> </body> </html> |
Я упростил код, чтобы решение стало очевидно:
<form action=""> <p>Пароль:<input type="password" name="password1" id="password1" /></p> <p>Повторите пароль:<input type="password" name="password2" id="password2" /></p> <p>Email: <input type="text" name="email" id="email" /></p> <p><input type="submit" id="submit_button" onclick="return validateForm()"/></p> </form> function validateForm () { // проверяем пароли // выбираем элементы var password1 = document.getElementById('password1'); var password2 = document.getElementById('password2'); // сравниваем написанное, если не равно, то: if (password1.value !== password2.value) { // сообщаем пользователю, можно сделать как угодно alert('Проверьте пароли!'); // сообщаем браузеру, что не надо обрабатывать нажатие кнопки // как обычно, т. е. не надо отправлять форму return false; } // проверяем email var email = document.getElementById('email'); // регулярка для проверки, не знаю, работает ли приведенный в примере var email_regexp = /[0-9a-zа-я_A-ZА-Я]+@[0-9a-zа-я_A-ZА-Я^.]+\.[a-zа-яА-ЯA-Z]{2,4}/i; // проверяем значение поля email, если нет, то: if (!email_regexp.test(email.value)) { alert('Проверьте email'); return false; } } Подробнее про return false . Здесь хочу отметить, что в случае ошибки функция возвращает ложь, а строчка в onclick кнопки возвращает значение функции всегда, т. е. при ошибке в onclick возвращается false. Я также не был уверен в правильности регулярного выражения, приведенного выше, потому взял простейшее для проверки email. Про них можно прочитать на сайте. Первая и главная ошибка, которая бросилась в глаза - неправильная верстка формы, т. е. 2 тега form. Кнопка submit должна находится в той же форме, которую отправляет. Подробнее тут. Пример тут. |
Спасибо разобрался все работает. Не подскажите как передать поля с именем и фамилией на другую страницу.
Пример: когда я нажимаю кнопку подтвердить то выполняется переход на другую страницу и выводит фамилию и имя которое я ввёл. |
В начале формы пишешь:
<form action="test.php" method="get">вместо <form action=""> И добавляешь 2 input'а с type="text" и name="firstname" и name="lastname" Создаешь в той же папке test.php следующего содержания: <?php echo "Имя " . $_GET[firstname] . " Фамилия " . $_GET[lastname]; ?> Для этого должен быть настроен php, это в гугл:) . Кстати, можно по-другому, без php: <!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Test</title> </head> <body> <form action="test2.html" method="get"> Email:<input type="text" name="email" value="test_email"/> Phone:<input type="text" name="phone" value="121222"/> <input type="submit" /> </form> </body> </html> Файл test2.html: <script type="text/javascript" charset="utf-8"> var resultats = location.search.slice(1).split('&').map(function (e) { return e.split('=')[1] }); document.writeln('Email:' + resultats[0]); document.writeln('Phone:' + resultats[1]); </script> В строке с resultats, по порядку: 1. location.search - берем строку вида ('?emai=te&phone=1'). 2. slice(1) - убираем знак вопроса 3. split('&') - разделяем строку на массив строк по '&' 4. map(function (e) {}) - проходим по массиву и каждый элемент еще раз разбиваем по '=' и возвращаем второй элемент. |
Спасибо большое за помощь, очень помогли.
|
Часовой пояс GMT +3, время: 09:05. |