|
JavaScript / HTML Создание динамической разметки страниц |
05.02.2013, 23:47
|
#1
|
Разработчик
Регистрация: 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
|
.
Регистрация: 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
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: JavaScript: Перехват Submit
Сообщение от MoKa
Там же и ответил там:
Какое именно тебе нужно
регулярное выражение?
|
Например такое:
/^[a-z0-9]+([_.-])[a-z0-9]+$/i
(проверка логина)
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
06.02.2013, 19:24
|
#4
|
.
Регистрация: 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
|
Разработчик
Регистрация: 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
|
.
Регистрация: 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
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: 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
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: JavaScript: Перехват Submit
Сообщение от Randomize
|
Твоё выражение не имеет ^ и $ тем самым возвратит 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
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: 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
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: JavaScript: Перехват Submit
Сообщение от Randomize
про ^...$ - знаю, не указал умышленно.
остальное, да, тупанул. Но сути это не меняет. Юзайте символьные классы и будет вам чичастье.
|
Ну символьные можно конечно - но я не вижу выгоды в них, т.к. больше контроля и точности в более конкретных указаниях.
|
(Offline)
|
|
07.02.2013, 00:53
|
#11
|
Разработчик
Регистрация: 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
|
.
Регистрация: 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
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: JavaScript: Перехват Submit
Заметь, что в UPD своего прошлого сообщения я написал то же самое . Сошлись на мнениях.
Сообщение от MoKa
Но учти, что обычно не
позволяют никакие -_. в
логинах вообще.
Ты можешь позволить 1-2
пробела если хочешь.
|
У меня стандарт логина чем-то схож с электронным адресом (до знака @) и последнее регулярное выражение идеально подходит.
Окей, с этим разобрались - вернемся к сабжу.
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
07.02.2013, 02:38
|
#14
|
.
Регистрация: 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)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:20.
|