Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Валидация формы (https://javascript.ru/forum/dom-window/75400-validaciya-formy.html)

LocoThatCould 05.10.2018 11:54

Валидация формы
 
[JS]function validate() {
var userEmail = document.getElementById("username");
var userPas = document.getElementById("pas");

var regexp = new RegExp("^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$");


if(userEmail.value != regexp) {
userEmail.style.border = "2px solid red";
return false;
}

if(userPas.value = "") {
userPas.style.border = "2px solid red";
return false;
}


return true;

}[JS]

Nexus 05.10.2018 12:29

regexp.test(userEmail.value)

[/JS]

LocoThatCould 05.10.2018 13:22

Переделал, но не работает
function validate() {

		var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		var regP = /(?=.*[0-9])(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z!@#$%^&*]{6,}/g;
		var emm = $('#username').val();
		var pass = $('#pas').val();

		if(reg.test(emm)){
			return true;
		}
		else{
			$('#username').css('border','2px solid red');
			return false;
		}

		if(regP.test(pass)){
			return true;
		}
		else{
			$('#pas').css('border','2px solid red');
			return false;
		}
	}

Nexus 05.10.2018 13:34

LocoThatCould, что значит "не работает"?
Не работает и не делает то, что вам нужно - разные вещи.

В вашем коде валидация пароля никогда не будет произведена.

Dilettante_Pro 05.10.2018 13:36

<input type='text' id = 'username'>
<button>Тест</button>
<script>
var userEmail = document.getElementById("username");
var regexp = new RegExp("^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$");

document.querySelector('button').onclick = function() {
   if(!regexp.test(userEmail.value)) {
       userEmail.style.border = "2px solid red";
   } else {
       userEmail.style.border = "2px solid green";
   }
}
</script>

LocoThatCould 05.10.2018 13:56

Вообщем нужно чтобы проводилась проверка корректности ввода email, через регулярное выражение, так же с паролем.. Почему пароль никогда не проверится?

LocoThatCould 05.10.2018 13:56

Код работает не корректно.

LocoThatCould 05.10.2018 14:21

Email заработал, еще вопрос в событии формы ONSUBMIT обязательно вписывать return для функции? можно об этом тему или инфу?

LocoThatCould 05.10.2018 14:23

function validate() {

		var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		var regP = /^[a-zA-Z]$/;;
		var emm = $('#username').val();
		var pass = $('#pas').val();

		if(reg.test(emm)){
			return true;
		}
		else{
			$('#username').css('border','2px solid red');
			return false;
		}

		if(regP.test(pass)){
			alert("Пароль должен содержать минимум 1 цифру,заглавную букву и 1 спец. символ!");
			return false;
		}
		else{
			$('#pas').css('border','2px solid red');
			return false;
		}
	}

Nexus 05.10.2018 14:28

<input type='text' id = 'username'>
<input type='text' id = 'pas'>
<button>Тест</button>
<script>
document.querySelector('button').onclick = validate;

function validate() {
    const expressions = {
        email: /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/,
        password: /(?=.*[0-9])(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z!@#$%^&*]{6,}/g
    };


    return !['username', 'pas'].filter((id, i) => {
        const node = document.getElementById(id);
        const isValid = (node.value.length && expressions[!i ? 'email' : 'password'].test(node.value));

        node.style.borderColor = isValid ? 'green' : 'red';


        return !isValid;
    }).length;
}
</script>

Nexus 05.10.2018 14:29

LocoThatCould,
Цитата:

Сообщение от LocoThatCould
можно об этом тему или инфу?

https://learn.javascript.ru/default-browser-action

LocoThatCould 05.10.2018 14:33

Работает но ничего не понятно, я с формой делал.
 
Это node js?

Nexus 05.10.2018 14:37

Цитата:

Сообщение от LocoThatCould
Это node js?

nodejs - платформа, не отдельный ЯП.
Код, который я представил написан на обычном js.
Использовал методы массива и стрелочные функции.

ps. Еще тернарный оператор.

Dilettante_Pro 05.10.2018 14:44

Без стрелочек и пр.
Email<input type='text' id = 'username'>
Password<input type='text' id = 'pass'>
<button>Тест</button>
<div id='result'></div>
<script>
var userEmail = document.getElementById("username"),
      userPass = document.getElementById("pass");
var regexp = new RegExp("^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$");
var regexpP = new RegExp("^[a-zA-Z0-9!@#$%^&*]{6,16}$");

document.querySelector('button').onclick = function() {
        result.textContent = validate();
}
function validate() {
   var resultE = false, resultP = false;
   if(!regexp.test(userEmail.value)) {
       userEmail.style.border = "2px solid red";
   } else {
       userEmail.style.border = "2px solid green";
       resultE = true;
   }
   if(!regexpP.test(userPass.value)) {
       userPass.style.border = "2px solid red";
   } else {
       userPass.style.border = "2px solid green";
       resultP = true;
   }
    return resultP && resultE;
}
</script>

Nexus 05.10.2018 14:48

19-ю строку из кода Dilettante_Pro можно удалить.

Dilettante_Pro 05.10.2018 14:58

Цитата:

Сообщение от Nexus
19-ю строку из кода Dilettante_Pro можно удалить.

Это потому, что неправильный result:)
Нужно два отдельных и результирующий по and (изменил пример)

Кстати, по регексу, использованному в вашем примере, мне не удается ввести корректный пароль

LocoThatCould 05.10.2018 14:59

Пароль в коде без стрелок не чекается..

Dilettante_Pro 05.10.2018 15:09

Цитата:

Сообщение от LocoThatCould
Пароль в коде без стрелок не чекается..

Имеется в виду пост 14? Если пароль состоит из латинских букв-цифр количеством от 6 до 16, то очень даже чекается.
А вот по примеру со стрелочками мне не удалось ввести корректный пароль

LocoThatCould 05.10.2018 15:20

Stop пропускает
 
Ввожу 2 символа в пароль в код из 14 поста и пропускает..

LocoThatCould 05.10.2018 15:22

Прошу прощения, моя вина все работает.. добавил s в инпут пароля...

LocoThatCould 05.10.2018 15:48

Dilettante_Pro,
Не подскажите как лучше сделать? Можно ли сместить Алерт? А то совсем не видно форму.. Еще заметил что при отсутствии логина и вводе корректного пароля, пароль, не подсвечивается зеленым...

Dilettante_Pro 05.10.2018 16:17

Цитата:

Сообщение от LocoThatCould
Можно ли сместить Алерт?.А то совсем не видно форму..

Я уже убрал алерт в Пост 14.
Цитата:

Сообщение от LocoThatCould
Еще заметил что при отсутствии логина и вводе корректного пароля, пароль, не подсвечивается зеленым...

Это при запуске примера Пост 14 здесь на форуме?

LocoThatCould 05.10.2018 18:27

Переделал, все гуд
 
Все намана)
document.querySelector('button').onclick = function() {
        result.textContent = validate();
    }

Что делает эта строка?

Dilettante_Pro 05.10.2018 18:31

Цитата:

Сообщение от LocoThatCould
Что делает эта строка?

Это не одна строка. Это обработчик клика по кнопке, который вызывает функцию validate().
Результат выполнения функции записывается в
<div id='result'></div>

LocoThatCould 05.10.2018 19:06

А мне нужно место блока вписать id формы?
 
А мне нужно место блока вписать id формы?

LocoThatCould 05.10.2018 19:09

Как вы выводите в result без выборки?

Nexus 05.10.2018 19:15

LocoThatCould,
Цитата:

Сообщение от LocoThatCould
Как вы выводите в result без выборки?

https://learn.javascript.ru/searchin...D1%82%D0%BE-id

LocoThatCould 05.10.2018 20:13

Я все не успакоюсь))
 
Крч при введении правильного пароля(по регулярке) и пустого email'a(или неправильного) происходит переадресация или перезагрузка и форма обновляется... т.к когда переходишь назад, то видно правильную работу скрипта:yes:

Nexus 05.10.2018 21:24

LocoThatCould, повешайте на форму обработчик события submit, если форма валидацию не прошла, то действие по умолчанию отменяйте(event.preventDefault()).

LocoThatCould 06.10.2018 14:28

if(result = false) {
       fr.event.preventDefault()
   }


Верно?

LocoThatCould 06.10.2018 14:28

fr - это id формы..

LocoThatCould 06.10.2018 14:29

Вставил после return result; в функции validate

LocoThatCould 06.10.2018 14:37

if(!validate()) {
      fr.preventDefault();
    }


?

LocoThatCould 06.10.2018 14:38

Форма

<form id="fr" onsubmit="validate();">

LocoThatCould 06.10.2018 14:59

Крч нашаманил, сам немогу понять как это работает но.. убрал result в

result = true;

Хз, вот думаю как.. возвращается 2 result получается и происходит путанница? ДА поидее так.. остается 1 тру в email и 2 false.. крч я думаю лучше сделать 2 функции проверки чтобы два результата было и добавить проверку этих результатов.. Я верно думаю?

LocoThatCould 06.10.2018 15:00

var userEmail = document.getElementById("username"),
      userPass = document.getElementById("pass")
var regexp = new RegExp("^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$");
var regexpP = new RegExp("^[a-zA-Z0-9!@#$%^&*]{6,16}$");



function validate() {
   var result = false;
   if(!regexp.test(userEmail.value)) {
       userEmail.style.border = "2px solid red";
       
       result = false;
      alert('Некорректно введен Email!')
   } else {
       userEmail.style.border = "2px solid green";
       	result = true;											          
   }
   if(!regexpP.test(userPass.value)) {
       userPass.style.border = "2px solid red";
       result = false;
      alert('Некорректно введен Пароль!')
   } else {
       userPass.style.border = "2px solid green";
       
   }
    return result;

}

Nexus 06.10.2018 19:20

document.querySelector('#fr').addEventListener('submit',function(e){
    if(!validate())
        e.preventDefault();
});

LocoThatCould 07.10.2018 08:37

не робит)) можете фул версию со всем скриптом скинуть, а то мб я не туда поставил)

Nexus 07.10.2018 09:38

LocoThatCould,
<form id="fr">
    <input type="text" id="username" />
    <input type="password" id="pass" />
    <input type="submit" />
</form>
<script>
    document.querySelector('#fr').addEventListener('submit', function(e) {
        if (!validate())
            e.preventDefault();
    });

    var userEmail = document.getElementById("username"),
        userPass = document.getElementById("pass"),
        regexp = new RegExp("^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$"),
        regexpP = new RegExp("^[a-zA-Z0-9!@#$%^&*]{6,16}$");


    function validate() {
        var result = regexp.test(userEmail.value);
        if (!result) {
            userEmail.style.border = "2px solid red";
            alert('Некорректно введен Email!');
        } else
            userEmail.style.border = "2px solid green";


        if (!regexpP.test(userPass.value)) {
            result = false;
            userPass.style.border = "2px solid red";
            alert('Некорректно введен Пароль!')
        } else
            userPass.style.border = "2px solid green";


        return result;
    }
</script>


Часовой пояс GMT +3, время: 13:50.