Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для sash
89 / 87 / 49
Регистрация: 09.10.2014
Сообщений: 571

Регулярное выражение для логина и емейла

15.02.2019, 23:36. Показов 636. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
привет) для входа на сайт в поле логин делаю так чтобы можно было ввести или логин или емейл. не проходит валидацию или/или регуляркой. Подскажите, в чём проблема? По отдельености всё проверяет - и логин и емейл. а вместе не хочет...

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var fall = $this.find('[name=login]').validate(/^([\w\-а-яё]{3,55})|([\w\.\-]+@[a-z]+\.[a-z]{2,6})$/i)//
             + $this.find('[name=password]').validate(/^[\w\-\.а-яё]{3,17}$/i)
 
 
$.fn.validate = function(pattern) {
   var el = $(this),
     val = el.val(),
     out = 0;
 
   if (!pattern.test(val)) {
     out++;
   }
   if (out) {
     el.css({
       color: 'red'
     });
   } else {
     el.css({
       color: 'white'
     });
   }
   return out;
 }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2019, 23:36
Ответы с готовыми решениями:

Регулярное выражение для проверки валидности email
Привет, Релиб! Подскажите, пожалуйста, как верно составить регулярное выражение для проверки email (правда, я использую его на asp с...

Регулярное выражение для проверки поля типа float
Привет, Релиб! Подскажите плз ,какое выражение нужно, чтоб проверить, что в поле ввели именно число типа флоат- т.е. там из 'нецифр'...

Регулярное выражение
Имеется такая разметка <li class="cat-item cat-item-9"> <a href="services/proizvodstvo-naruzhnoj-reklamy/"...

3
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
16.02.2019, 07:11
Здравствуйте.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
    <form>
        <input type="text" name="login" />
        <input type="text" name="password" />
        <input type="button" id="ok" value="Submit">
    </form>
    <script>
        $.fn.validate = function (pattern) {
            var el = $(this),
                val = el.val(),
                out = 0;
 
            if (!pattern.test(val)) {
                out = 1;
            }
            if (out) {
                el.css({
                    color: 'red'
                });
            } else {
                el.css({
                    color: 'black'
                });
            }
            return out;
        }
 
        $('[id=ok]').on('click', function () {
            var fall = $('[name=login]').validate(/^([\w\-а-яё]{3,55})|([\w\.\-]+@[a-z]+\.[a-z]{2,6})$/i)
                | $('[name=password]').validate(/^[\w\-\.а-яё]{3,17}$/i); // Общая сумма всегда не больше единицы
            if (fall)
                alert("Ошибочка ваша, мил человек.");
        });
 
        $('[name=login]').on('focus', noerror); // При фокусе на поле буквы черные
        $('[name=password]').on('focus', noerror);
 
        function noerror() {
            this.style.color = 'black';
        }
    </script>
</body>
</html>
1
 Аватар для sash
89 / 87 / 49
Регистрация: 09.10.2014
Сообщений: 571
16.02.2019, 08:28  [ТС]
Да я понимаю, весь хтмл и джс код у меня рабочий, единственное что регулярка не так как надо проверяет. Сделал так. более-менее нормально
JavaScript
1
/^(([\w\-а-яё])|([\w\.\-]{1,49}@[a-z]{1,7}\.[a-z]{2,6})){3,55}$/i
Всё равно ж не зайдёт на сайт если не совпадёт по базе
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
16.02.2019, 10:31
----------
Вариант с декларативной валидацией HTML5
с возможным указанием красных пояснений возле ошибочных полей.
- пока не нажмешь кнопку, поля вообще не проверяются.
- если кнопка нажата, то ошибочные поля краснеют.
- при фокусе на ошибочное поле, оно чернеет,
- при потере фокуса и если поле ошибочное, то оно краснеет.

Без jQuery, в данном варианте сохранена совместимость с ES5.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <style>
        .invalid { border-color: red; }
        .errmsg { color: red; }
    </style>
</head>
<body>
    <form>
        <input type="text" name="login" required pattern="^([\w\-а-яёА-ЯЁ]{3,55})|([\w\.\-]+@[a-zA-Z]+\.[a-zA-Z]{2,6})$" />
        <input type="text" name="password" required pattern="^[\w\-\.а-яёА-ЯЁ]{3,17}$" />
        <input type="button" id="ok" value="Submit">
    </form>
    <script>
        // Начало реализации класса HTML5Validator
        function HTML5Validator(form, constraints,
            invalidSelector,
            getErrEl = function (el) { form.querySelector('.' + el.getAttribute("name") + '-msg'); } // Предоставляет ссылку на поле с описанием ошибки
        ) {
            this.form = form;
            this.constraints = constraints;
            this.invalidSelector = invalidSelector || "invalid";
            this.getErrEl = getErrEl;
            if (!this.constraints)
            //this.constraints = [...this.form.elements].map(e => [e.getAttribute("name")]).filter(e => e[0]); // Современный и совместимый варианты 
            { this.constraints = []; for (var i = 0, name; i < this.form.elements.length; ++i) { if (name = this.form.elements[i].getAttribute("name")) this.constraints.push([name]); } }
 
            var that = this;
            // Функции, использующие замыкание на экземпляр HTML5Validator. Будут обработчиками, а там this чужой. Замыкаются на that
            this.focusHandler = function (e) {
                this.classList.remove(that.invalidSelector);
                var errEl = that.getErrEl(this);
                if (errEl) errEl.textContent = "";
            }
            this.blurHandler = function (e) {
                if (this.validity.valid === false) {
                    this.classList.add(that.invalidSelector);
                    that.setErrMsg(this);
                }
            }
        }
        HTML5Validator.prototype.validate = function () {
            var result = true,
                that = this;
            if (this.commonValidator)
                result = this.commonValidator() && result;
            this.constraints.forEach(function (item) {
                var field = that.form.elements[item[0]];
                if (field.validity.valid === false) {
                    result = false;
                    field.classList.add(that.invalidSelector);
                    that.setErrMsg(field);
                }
                else
                    field.classList.remove(that.invalidSelector);
 
                field.addEventListener("focus", that.focusHandler);
                field.addEventListener("blur", that.blurHandler);
            });
            return result;
        }
 
        HTML5Validator.prototype.setErrMsg = function (el) {
            var validationMessage = el.validationMessage;
            for (var key in el.validity) {
                if (key !== "valid" && el.validity[key]) {
                    var array = this.constraints.find((e => e[0] === el.getAttribute("name"))); // Нашли свой подмассив или не нашли :))
                    if (array && array[1] && array[1][key]) {
                        validationMessage = array[1][key];
                        break;
                    }
                }
            }
            var errEl = this.getErrEl(el);
            if (errEl) errEl.textContent = validationMessage;
        }
        // Конец реализации класса HTML5Validator
 
        //var constraints = [
        //     ["login", { valueMissing: "Укажите логин", patternMismatch: "Не соответствует формату email" }],
        //     ["password", { valueMissing: "Укажите пароль", patternMismatch: "Не соответствует формату пароля" }}]
        // ];
        
        // Запуск валидатора
        var form = document.forms[0];
        var validator = new HTML5Validator(form);
        form.querySelector("[id=ok]").onclick = function () { validator.validate(); };
    </script>
</body>
</html>
Здесь я решил не автоматически генерить <span> для красных пояснений, а пытаться искать готовые из html.
Имхо, код получился гибче, чем автогенерация.
Можно ведь заранее приготовить произвольные контейнеры для поясняющих красных сообщений.

Добавлено через 1 час 19 минут
Вариант с декларативной валидацией HTML5 с возможным указанием красных пояснений возле ошибочных полей. Без jQuery, в синтаксисе класса ES2015.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<!DOCTYPE HTML>
<html>
 
<head>
    <meta charset="utf-8">
    <style>
        .invalid { border-color: red; }
        .errmsg { color: red; }
    </style>
</head>
 
<body>
    <div class="article container">
        <div class="row">
            <div class="col-sm-6 col-md-4 col-md-offset-4">
                <p>
                    <h3>Пример формы</h3>
                    <form action="/save" method="post"> <br />
                        <label>Фамилия: </label> <input type="text" ng-model="users.surname" name="surname" class="form-control"
                            pattern="\s*\S.*" required> <span class="errmsg surname-err"></span><br />
                        <label>Имя: </label> <input type="text" ng-model="users.name" name="name" class="form-control"
                            required> <span class="errmsg name-err"></span><br />
                        <label>Отчество: </label> <input type="text" ng-model="users.patronymic" name="patronymic"
                            class="form-control" required> <span class="errmsg patronymic-err"></span><br />
                        <label>Адрес: </label> <input type="text" ng-model="users.adress" name="adress" class="form-control"
                            required> <span class="errmsg adress-err"></span><br />
                        <label>Телефон: </label> <input type="text" ng-model="users.phone" name="phone" class="form-control"
                            required> <span class="errmsg phone-err"></span><br />
                        <label>E-mail: </label> <input type="text" ng-model="users.mail" name="mail" class="form-control"><br />
                        <br />
                        <button type="button" class="btn btn-default">Отправить</button>
                    </form>
            </div>
        </div>
    </div>
    <script>
        class HTML5Validator {
            constructor(form, constraints,
                invalidSelector,
                getErrEl = el => this.form.querySelector(`.${el.getAttribute("name")}-err`)
            ) {
                this.form = form;
                this.constraints = constraints;
                this.invalidSelector = invalidSelector || "invalid";
                this.getErrEl = getErrEl;
                if (!Array.isArray(this.constraints))
                    this.constraints = [...this.form.elements].map(e => [e.getAttribute("name")]).filter(e => e[0]); // Современный и совместимый варианты 
                //{ this.constraints = []; for (var i = 0, name; i < this.form.elements.length; ++i) { if (name = this.form.elements[i].getAttribute("name")) this.constraints.push([name]); } }
 
                let that = this;
                // Функции, использующие замыкание на экземпляр HTML5Validator. Будут обработчиками, а там this чужой. Замыкаются на that
                this.focusHandler = function (e) {
                    this.classList.remove(that.invalidSelector);
                    let errEl = that.getErrEl(this);
                    if (errEl) errEl.textContent = "";
                }
                this.blurHandler = function (e) {
                    if (this.validity.valid === false) {
                        this.classList.add(that.invalidSelector);
                        that.setErrMsg(this);
                    }
                }
            }
            validate() {
                let result = true;
                if (this.commonValidator)
                    result = this.commonValidator() && result;
                this.constraints.forEach(item => {
                    let field = this.form.elements[item[0]];
                    if (field.validity.valid === false) {
                        result = false;
                        field.classList.add(this.invalidSelector);
                        this.setErrMsg(field);
                    }
                    else
                        field.classList.remove(this.invalidSelector);
 
                    field.addEventListener("focus", this.focusHandler);
                    field.addEventListener("blur", this.blurHandler);
                });
                return result;
            }
 
            setErrMsg(el) {
                let validationMessage = el.validationMessage;
                for (let key in el.validity) {
                    if (key !== "valid" && el.validity[key]) {
                        let array = this.constraints.find((e => e[0] === el.getAttribute("name"))); // Нашли свой подмассив или не нашли :))
                        if (Array.isArray(array) && array[1] && array[1][key]) {
                            validationMessage = array[1][key];
                            break;
                        }
                    }
                }
                let errEl = this.getErrEl(el);
                if (errEl) errEl.textContent = validationMessage;
            }
        }
 
        let constraints = [
            ["surname", { valueMissing: "Укажите фамилию", patternMismatch: "Фамилия должна содержать не менее 1 символа" }],
            ["name", { valueMissing: "Укажите имя" }],
            ["patronymic", { valueMissing: "Укажите отчество" }],
            ["adress", { valueMissing: "Укажите адрес" }],
            ["phone", { valueMissing: "Укажите номер телефона" }]
        ];
        let form = document.forms[0],
            validator = new HTML5Validator(form, constraints, null, function (el) { return this.form.querySelector(`.${el.getAttribute("name")}-err`); });
        form.querySelector(".btn-default").onclick = e => { validator.validate(); };
    </script>
</body>
</html>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2019, 10:31
Помогаю со студенческими работами здесь

Регулярное выражение
var a = ; var grek = /{1}/; for(var j = 0; j&lt;grek.length; j++) { if(grek.exec(a(j)) = null) { alert('asdfg'); } ...

Регулярное выражение
Как найти в строчке все id=&quot;(вставить суда свой текст)_ss&quot; Возможно это сделать через регулярку, за раз??

Регулярное выражение исключающее f{{ и }}f
в html есть обычный текст f{{2*3+4}}f мне нужно в js получить всё что внутри находится, и желательно выполнить 2*3+4 и занести результат...

Простое регулярное выражение
Подскажите пожалуйста, как нужно записать регулярное выражение на JS чтобы удалить символ - из строки. У меня на входе отрицательное...

JavaScript!? Регулярное выражение 1-но!
JavaScript!? Помогите составить условие, если (слово содержит кириллические символы) то...?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru