Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Веб-программирование > JavaScript / HTML

JavaScript / HTML Создание динамической разметки страниц

Ответ
 
Опции темы
Старый 05.02.2013, 23:47   #1
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
JavaScript: Перехват Submit

На станице имеется обычная форма (method="POST") с несколькими полями ввода и кнопкой submit.
Помогите написать javascript, чтоб при нажатии на кнопку выводилось предупреждение (например в <div id="warning"></div>), если введенный текст не совпадает с регулярным выражением, иначе выполнить submit.

Начало обсуждения здесь.
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 06.02.2013, 03:00   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: JavaScript: Перехват Submit

Там же и ответил там:
Какое именно тебе нужно регулярное выражение?

Вот простейший пример без jQuery.
Тут при посте формы, запускается функция по событию onsubmit. Которое проверяет если хоть одно поле имеет & - то он не пропустит запрос, и изменит класс формы, который в CSS будет обрамлен.
http://jsfiddle.net/tgM7P/
(Offline)
 
Ответить с цитированием
Старый 06.02.2013, 15:02   #3
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: JavaScript: Перехват Submit

Сообщение от MoKa
Там же и ответил там:
Какое именно тебе нужно
регулярное выражение?
Например такое:
/^[a-z0-9]+([_.-])[a-z0-9]+$/i
(проверка логина)
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 06.02.2013, 19:24   #4
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: JavaScript: Перехват Submit

Сообщение от 2Fake Посмотреть сообщение
Например такое:
/^[a-z0-9]+([_.-])[a-z0-9]+$/i
(проверка логина)
Тут у тебя нужен какой либо из знаков по середине.
Вот такой:
/^[a-z0-9]+[a-z0-9_.-]*$/i
Обязует начало ника с латиницы или числа, и позволяет три знака после.

Вот обновил: http://jsfiddle.net/tgM7P/1/
Проверяет если логин длиной 4 или более значка и если он валидный по выше приведённому регулярному выражению.
(Offline)
 
Ответить с цитированием
Старый 06.02.2013, 21:29   #5
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: JavaScript: Перехват Submit

Моя регулярка меня устраивает больше чем твоя, ведь обязует начало и конец логина с латинского символа или цифры, а также возможность использовать символы _.- внутри.

Еще бы можно было добавить что-то вроде {3,16} для ограничения длины логина.

Твоя:
/^[a-z0-9]+[a-z0-9_.-]*$/i
login - GOOD
my.login - GOOD
login. - BAD
my--login - BAD
_login - GOOD

Моя:
/^[a-z0-9]+([_.-])[a-z0-9]+$/i
login - GOOD
my.login - GOOD
login. - GOOD
my--login - GOOD
_login - GOOD
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 06.02.2013, 22:36   #6
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: JavaScript: Перехват Submit

Сообщение от 2Fake Посмотреть сообщение
Моя регулярка меня устраивает больше чем твоя, ведь обязует начало и конец логина с латинского символа или цифры, а также возможность использовать символы _.- внутри.

Еще бы можно было добавить что-то вроде {3,16} для ограничения длины логина.

Твоя:
/^[a-z0-9]+[a-z0-9_.-]*$/i
login - GOOD
my.login - GOOD
login. - BAD
my--login - BAD
_login - GOOD

Моя:
/^[a-z0-9]+([_.-])[a-z0-9]+$/i
login - GOOD
my.login - GOOD
login. - GOOD
my--login - GOOD
_login - GOOD

Что-то ты намудрил.
У тебя почти все BAD
Из-за того что у тебя есть nested result - то что в скобках.
И оно может вернуть true когда остальное нет. Будь осторожен тут.
Вот протестируй тут: http://regexpal.com/
Если всё выделил жёлтым - значит валидно.
login - BAD
my.login - GOOD
login. - BAD
my--login - BAD
_login - BAD

Мой же как раз требует начало как и твой (латиница или цифра) но ему пофиг что будет далее, т.к. конец не важен.
Если тебе нужно начало и конец латиница или цифра, и что угодно посередине, и ограничение от 4 до 14 символов:
/^[a-z0-9][a-z0-9_.-]{2,14}[a-z0-9]$/i
И результат такой:
login
my.login
login.
my--login
_login
Ты что-то конкретно там намудрил. Прежде чем утверждать что я что-то сделал не так, убедись что ты сам не намахнулся где-то.
(Offline)
 
Ответить с цитированием
Старый 06.02.2013, 22:39   #7
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: JavaScript: Перехват Submit

([\d\w]+[\s\-\.]*[\d\w]+){3,16}
http://www.pagecolumn.com/tool/regtest.htm

\d - число
\w - печатный символ (a-z а-я)
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 06.02.2013, 22:45   #8
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: JavaScript: Перехват Submit

Сообщение от Randomize Посмотреть сообщение
([\d\w]+[\s\-\.]*[\d\w]+){3,16}
http://www.pagecolumn.com/tool/regtest.htm

\d - число
\w - печатный символ (a-z а-я)
Твоё выражение не имеет ^ и $ тем самым возвратит true даже если не вся строка валидна.
Далее у тебя идёт повторение от 3 до 16 каждой комбинации в общем. Поэтому смысл делать всё это в скобках если у тебя он будет проверять повторение всей комбинации а не число символов.
Проверь своё выражение на такой строке:
my.login фывфыв фывфasd as dasdas daksjdf oaisdfaosiudfoaisuh dfiaush dfioaush dfoiaush dfoiaus hdfoaisu hdfoaisudh faosiud hfiuh dfiuhiuhas,d a, .2323.4 23 423
Оно вернёт true на test'е.
(Offline)
 
Ответить с цитированием
Старый 07.02.2013, 00:45   #9
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: JavaScript: Перехват Submit

Сообщение от MoKa Посмотреть сообщение
Твоё выражение не имеет ^ и $ тем самым возвратит true даже если не вся строка валидна.
Далее у тебя идёт повторение от 3 до 16 каждой комбинации в общем. Поэтому смысл делать всё это в скобках если у тебя он будет проверять повторение всей комбинации а не число символов.
Проверь своё выражение на такой строке:
my.login фывфыв фывфasd as dasdas daksjdf oaisdfaosiudfoaisuh dfiaush dfioaush dfoiaush dfoiaus hdfoaisu hdfoaisudh faosiud hfiuh dfiuhiuhas,d a, .2323.4 23 423
Оно вернёт true на test'е.
про ^...$ - знаю, не указал умышленно равно как и /.../.
остальное, да, тупанул. Но сути это не меняет. Юзайте символьные классы и будет вам чичастье.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 07.02.2013, 00:45   #10
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: JavaScript: Перехват Submit

Сообщение от Randomize Посмотреть сообщение
про ^...$ - знаю, не указал умышленно.
остальное, да, тупанул. Но сути это не меняет. Юзайте символьные классы и будет вам чичастье.
Ну символьные можно конечно - но я не вижу выгоды в них, т.к. больше контроля и точности в более конкретных указаниях.
(Offline)
 
Ответить с цитированием
Старый 07.02.2013, 00:53   #11
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: JavaScript: Перехват Submit

Упс, пардон.
Действительно намудрил (надо отоспаться).

Эта регулярка
/^[a-z0-9][a-z0-9_.-]{2,14}[a-z0-9]$/i
более близка к тому что мне нужно (только в логине должен допускаться лишь один символ внутри).

UPD: Пока что использую такое выражение:
/^[a-z0-9]+[_.-]?[a-z0-9]+$/i,
количество введенных символов буду проверять отдельно яваскриптом и контрольная проверка будет еще в пхп (на всякий пожарный).
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 07.02.2013, 01:10   #12
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: JavaScript: Перехват Submit

Сообщение от 2Fake Посмотреть сообщение
Упс, пардон.
Действительно намудрил (надо отоспаться).

Эта регулярка
/^[a-z0-9][a-z0-9_.-]{2,14}[a-z0-9]$/i
более близка к тому что мне нужно (только в логине должен допускаться лишь один символ внутри).
Если только один, ну тогда так:
/^[a-z0-9]+[_.-]?[a-z0-9]+$/i
И отдельно до регулярного выражения проверяй длину строки. Но я не вижу смысла только одного допущения, т.к. это не логично. Ты можешь проверить на соотношение символов и латиницы/цифр, и далее если символов больше - то не позволять.
Но учти, что обычно не позволяют никакие -_. в логинах вообще.
Ты можешь позволить 1-2 пробела если хочешь.
Плюс учти, что тебе нужно проводить точно такую же валидацию на стороне сервера, т.к. front-end всё же обходится.
(Offline)
 
Ответить с цитированием
Старый 07.02.2013, 01:36   #13
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: JavaScript: Перехват Submit

Заметь, что в UPD своего прошлого сообщения я написал то же самое . Сошлись на мнениях.

Сообщение от MoKa
Но учти, что обычно не
позволяют никакие -_. в
логинах вообще.
Ты можешь позволить 1-2
пробела если хочешь.
У меня стандарт логина чем-то схож с электронным адресом (до знака @) и последнее регулярное выражение идеально подходит.

Окей, с этим разобрались - вернемся к сабжу.
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 07.02.2013, 02:38   #14
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: JavaScript: Перехват Submit

Сообщение от 2Fake Посмотреть сообщение
У меня стандарт логина чем-то схож с электронным адресом (до знака @) и последнее регулярное выражение идеально подходит.
Ооооочень отдалёно схож.
Вот тебе эксклюзивно регулярное выражение, которое проходит почти все мыслимые эмайлы основываясь стандартам (ссылка с деталями ниже):
/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
Вот тут инфа есть.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 10:23.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com