forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   JavaScript / HTML (http://forum.boolean.name/forumdisplay.php?f=136)
-   -   JavaScript: Перехват Submit (http://forum.boolean.name/showthread.php?t=17839)

Trazzy 05.02.2013 23:47

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

Начало обсуждения здесь.

moka 06.02.2013 03:00

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

Вот простейший пример без jQuery.
Тут при посте формы, запускается функция по событию onsubmit. Которое проверяет если хоть одно поле имеет & - то он не пропустит запрос, и изменит класс формы, который в CSS будет обрамлен.
http://jsfiddle.net/tgM7P/

Trazzy 06.02.2013 15:02

Ответ: JavaScript: Перехват Submit
 
Цитата:

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

Например такое:
/^[a-z0-9]+([_.-])[a-z0-9]+$/i
(проверка логина)

moka 06.02.2013 19:24

Ответ: JavaScript: Перехват Submit
 
Цитата:

Сообщение от 2Fake (Сообщение 251911)
Например такое:
/^[a-z0-9]+([_.-])[a-z0-9]+$/i
(проверка логина)

Тут у тебя нужен какой либо из знаков по середине.
Вот такой:
/^[a-z0-9]+[a-z0-9_.-]*$/i
Обязует начало ника с латиницы или числа, и позволяет три знака после.

Вот обновил: http://jsfiddle.net/tgM7P/1/
Проверяет если логин длиной 4 или более значка и если он валидный по выше приведённому регулярному выражению.

Trazzy 06.02.2013 21:29

Ответ: 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

moka 06.02.2013 22:36

Ответ: JavaScript: Перехват Submit
 
Цитата:

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

Еще бы можно было добавить что-то вроде {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

Ты что-то конкретно там намудрил. Прежде чем утверждать что я что-то сделал не так, убедись что ты сам не намахнулся где-то.

Randomize 06.02.2013 22:39

Ответ: JavaScript: Перехват Submit
 
Код:

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

\d - число
\w - печатный символ (a-z а-я)

moka 06.02.2013 22:45

Ответ: JavaScript: Перехват Submit
 
Цитата:

Сообщение от Randomize (Сообщение 251970)
Код:

([\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'е.

Randomize 07.02.2013 00:45

Ответ: JavaScript: Перехват Submit
 
Цитата:

Сообщение от MoKa (Сообщение 251972)
Твоё выражение не имеет ^ и $ тем самым возвратит 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'е.

про ^...$ - знаю, не указал умышленно равно как и /.../.
остальное, да, тупанул. Но сути это не меняет. Юзайте символьные классы и будет вам чичастье.

moka 07.02.2013 00:45

Ответ: JavaScript: Перехват Submit
 
Цитата:

Сообщение от Randomize (Сообщение 251985)
про ^...$ - знаю, не указал умышленно.
остальное, да, тупанул. Но сути это не меняет. Юзайте символьные классы и будет вам чичастье.

Ну символьные можно конечно - но я не вижу выгоды в них, т.к. больше контроля и точности в более конкретных указаниях.

Trazzy 07.02.2013 00:53

Ответ: JavaScript: Перехват Submit
 
Упс, пардон.
Действительно намудрил :) (надо отоспаться).

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

UPD: Пока что использую такое выражение:
/^[a-z0-9]+[_.-]?[a-z0-9]+$/i,
количество введенных символов буду проверять отдельно яваскриптом и контрольная проверка будет еще в пхп (на всякий пожарный).

moka 07.02.2013 01:10

Ответ: JavaScript: Перехват Submit
 
Цитата:

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

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

Если только один, ну тогда так:
Код:

/^[a-z0-9]+[_.-]?[a-z0-9]+$/i
И отдельно до регулярного выражения проверяй длину строки. Но я не вижу смысла только одного допущения, т.к. это не логично. Ты можешь проверить на соотношение символов и латиницы/цифр, и далее если символов больше - то не позволять.
Но учти, что обычно не позволяют никакие -_. в логинах вообще.
Ты можешь позволить 1-2 пробела если хочешь.
Плюс учти, что тебе нужно проводить точно такую же валидацию на стороне сервера, т.к. front-end всё же обходится.

Trazzy 07.02.2013 01:36

Ответ: JavaScript: Перехват Submit
 
Заметь, что в UPD своего прошлого сообщения я написал то же самое :-D. Сошлись на мнениях.

Цитата:

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

У меня стандарт логина чем-то схож с электронным адресом (до знака @) и последнее регулярное выражение идеально подходит.

Окей, с этим разобрались - вернемся к сабжу.

moka 07.02.2013 02:38

Ответ: JavaScript: Перехват Submit
 
Цитата:

Сообщение от 2Fake (Сообщение 251994)
У меня стандарт логина чем-то схож с электронным адресом (до знака @) и последнее регулярное выражение идеально подходит.

Ооооочень отдалёно схож.
Вот тебе эксклюзивно регулярное выражение, которое проходит почти все мыслимые эмайлы основываясь стандартам (ссылка с деталями ниже):
Код:

/^(([^<>()[\]\\.,;:\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,}))$/
Вот тут инфа есть.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot