Комментарии 66
«Целые числа и числа с плавающей точкой» и «Целые числа и с плавающей точкой» — одинаковы, может одно из них удалить?
| Набор из букв и цифр (латиница + кириллица):
| ^[а-яА-Яa-zA-Z0-9]+$
Не верный шаблон т.к. не проглотит букву Ё:
pattern = /^[а-яА-Яa-zA-Z0-9]+$/;
str = 'прёт';
console.log(pattern.test(str));
| ^[а-яА-Яa-zA-Z0-9]+$
Не верный шаблон т.к. не проглотит букву Ё:
pattern = /^[а-яА-Яa-zA-Z0-9]+$/;
str = 'прёт';
console.log(pattern.test(str));
Некоторые регулярки слабоваты — слишком тупо валидируют
Емаил: /^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$/
URL: ~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}". "(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|". «org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?». "!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&". "?+=\~/-]*)?(?:#[^ '\"&]*)?$~i
Емаил: /^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$/
URL: ~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}". "(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|". «org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?». "!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&". "?+=\~/-]*)?(?:#[^ '\"&]*)?$~i
Вообще то E-mail немного больше судя по RFC822
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
\t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)
Email не проходит c символом
+
. Это довольно важная нотация, незаслуженно обходимая вниманием (можно тэги ставить или фильтры настраивать в гуглопочте, яндексе и т.п.)URL че-то побился
~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&?+=\~/-]*)?(?:#[^ '\"&]*)?$~i
~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&?+=\~/-]*)?(?:#[^ '\"&]*)?$~i
А толку то в валидации регулярными выражениями? Они дадут только некоторое подобие правильности введённых данных.
Номер кредитки:
[0-9]{13,16}
Во первых, не любой номер является кредиткой, во вторых, если проверять ввод, то мне вот удобнее было бы вводить со "-", как на самой кредитке написано. Или с пробелами.
Даты в формате позволяют вводить 31 февраля и тому подобные не даты.
IPv4 можно вводить числом.
Если мне не изменяет память, то в ICQ можно добавлять к номеру какое-то число и будет всё тот-же номер, из-за чего уверенно искались и 15-значные числа.
Так что:
Номер кредитки:
[0-9]{13,16}
Во первых, не любой номер является кредиткой, во вторых, если проверять ввод, то мне вот удобнее было бы вводить со "-", как на самой кредитке написано. Или с пробелами.
Даты в формате позволяют вводить 31 февраля и тому подобные не даты.
IPv4 можно вводить числом.
Если мне не изменяет память, то в ICQ можно добавлять к номеру какое-то число и будет всё тот-же номер, из-за чего уверенно искались и 15-значные числа.
Так что:
Если у программиста есть проблема и он думает — «Я решу ее при помощи регулярных выражений», то с этого момента у программиста уже две проблемы. ©
Да, само собой, использование регулярных выражений в этих случаях не дает сильной защиты от ошибок, но большинство опечаток пользователей она будет отлавливать.
1) Название топика (на текущий момент) «Регулярные выражения для валидации …». Это как-то плохо сочетается с тем, что ошибки оно не отлавливает.
2) Почти для каждого вида вводимых данных можно сделать редактор, который обеспечит более удобное введение этих данных + правила валидации, которые имеют некоторую чёткую логику, которой часто не хватает в грамматике регулярных выражений.
Соответственно исправлять очепатки и делать более удобным ввод — задача редактора, а регулярки просто способ чуть чуть спрятать проблему, которая потом аукнется после.
2) Почти для каждого вида вводимых данных можно сделать редактор, который обеспечит более удобное введение этих данных + правила валидации, которые имеют некоторую чёткую логику, которой часто не хватает в грамматике регулярных выражений.
Соответственно исправлять очепатки и делать более удобным ввод — задача редактора, а регулярки просто способ чуть чуть спрятать проблему, которая потом аукнется после.
/(19|20)\d\d-((0[1-9]|1[012])-(0[1-9]|[12]\d)|(0[13-9]|1[012])-30|(0[13578]|1[02])-31)/
вот так дата проверяется полностью, кроме учета високосных лет )
вполне рабочая регулярка, которая может быть полезна тем кто изучает Регекспы как пример.
озвучивайте что непонравилось — подискутируем.
озвучивайте что непонравилось — подискутируем.
25. Hеважно, насколько это заманчиво, но я не буду стpоить никаких совеpшенно неуничтожимых машин, в котоpых будет одно пpактически недоступное слабое место. © 100 правил Темного Властелина
ну тогда вообще программировать нельзя. ведь как известно «в программе всегда есть еще один баг». хотя подозреваю что к вашим программа это не относится?)
В точку. Все мои программы идеальны, Agda и Coq в помощь. =) Всё-таки должны же быть исключения из правил.
А если чуть более серьёзно, то баги всё-таки то, что не ожидает разработчик, а если знать где упасть то можно ипоставить зомби с носилками соломки постелить.
А если чуть более серьёзно, то баги всё-таки то, что не ожидает разработчик, а если знать где упасть то можно и
да, и меня как пользователя сильно раздражает в полях ввода кредитки отсутствие поддержки пробелов, либо ограничение длины номера в поле без учёта пробелов
Регексп на домен не корректен. Необходимо добавить а-Я, ибо например *.рф домены не пройдут.
haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx — занятная статья про валидацию email
регулярка ip адресов некорректная! — пропускает например такую строку .192.168.0.100
вот правильный вариант:
вот правильный вариант:
((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)
Ерунда какая-то. Во-первых, лучше выучить regexp, чем пользоваться чем-то, чего не понимаешь. Во-вторых, в номерах кредиток часто ставят пробелы, в ICQ — минусы, в домены бывают локализованные (хоть на арабском), маска IPv6 допускает сколько угодно двоеточий подряд и так далее.
Лучше создать свой велосипед, чем ездить на чужом.
Логика из этой серии.
Конечно лучше выучить регулярные выражения, все языки и т.п., но использование чужого кода сэкономит массу времени.
Ваш Ко.
Логика из этой серии.
Конечно лучше выучить регулярные выражения, все языки и т.п., но использование чужого кода сэкономит массу времени.
Ваш Ко.
Ну давайте ещё постить «как проверить переменную на true» или «как сделать цикл от одного до десяти».
Демагогия. Регулярки достаточно сложны, хотя применимость их в основном упирается в задачи валидации.
Причем многие из этих задач стандартны, что демонстрирует этот топик.
Целому ряду программистов, этого топика вполне хватит, на всю программистскую жизнь. Далеко не все становятся гуру.
Нет ничего плохого в том чтобы использовать Смарти, вместо того чтобы писать свой шаблонизатор, точно так же как нет ничего плохого в том, чтобы использовать чужую регулярку вместо написания своей.
Причем многие из этих задач стандартны, что демонстрирует этот топик.
Целому ряду программистов, этого топика вполне хватит, на всю программистскую жизнь. Далеко не все становятся гуру.
Нет ничего плохого в том чтобы использовать Смарти, вместо того чтобы писать свой шаблонизатор, точно так же как нет ничего плохого в том, чтобы использовать чужую регулярку вместо написания своей.
использование чужого кода без понимания черевато велосипедами поверх велосипедов.
использование регулярки, без понимания ее логики, приводит к фразам типа
А человек который легко поймет тут приведенные регулярки не будет использовать чужие — ему проще написать свою на этом уровне. Тем более что по крайней мере большинство приведенных регулярок не решают заявленную задачу.
использование регулярки, без понимания ее логики, приводит к фразам типа
Если у программиста есть проблема и он думает — «Я решу ее при помощи регулярных выражений», то с этого момента у программиста уже две проблемы. ©
А человек который легко поймет тут приведенные регулярки не будет использовать чужие — ему проще написать свою на этом уровне. Тем более что по крайней мере большинство приведенных регулярок не решают заявленную задачу.
Пароль (Строчные и прописные латинские буквы, цифры):
Расстрелял бы… Пароль должен быть от 0х00 до 0хFF без исключений, как его набирать и запоминать дело пользователя.
время HH:MM:SS
^([0-1]\d|2[0-3])(:[0-5]\d){2}$
В общем, минусую пост, он очень вредный. Валидировать данные такими недоделанными регулярками не нужно.
Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, но первый символ обязательно буква):
((^|:)([0-9a-fA-F]{0,4})){1,8}$
да ладна? х)
((^|:)([0-9a-fA-F]{0,4})){1,8}$
да ладна? х)
Я недавно писал упрощенный регекпс на урл, у меня получилось слегка посложнее, чем у вас:
Попробовать можно будет в следующем релизе underscore.string.
var urlRegex = (function(){
var alpha = 'a-z',
// scheme = '['+alpha+'][-+.'+alpha+'\\d]*',
alnum = alpha + '\\d',
hex = 'a-f\\d',
unreserved = '-_.!~*\'()' + alnum,
reserved = ';/?:@&=+$,\\[\\]',
escaped = '%['+hex+']{2}',
uric = '(?:['+unreserved+reserved+']|'+escaped+')',
userinfo = '(?:['+unreserved+';:&=+$,]|'+escaped+')*',
domlabel = '(?:['+alnum+'](?:[-'+alnum+']*['+alnum+'])?)',
toplabel = '(?:['+alpha+'](?:[-'+alnum+']*['+alnum+'])?)',
ipv4addr = '\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}',
hex4 = '['+hex+']{1,4}',
lastpart = '(?:'+hex4+'|'+ipv4addr+')',
hexseq1 = '(?:'+hex4+':)*'+hex4,
hexseq2 = '(?:'+hex4+':)*'+lastpart,
ipv6addr = '(?:'+hexseq2+'|(?:'+hexseq1+')?::(?:'+hexseq2+')?)',
ipv6ref = '\\['+ipv6addr+'\\]',
hostname = '(?:'+domlabel+'\\.)*'+toplabel+'\\.?',
host = '(?:'+hostname+'|'+ipv4addr+'|'+ipv6ref+')',
reg_name = '(?:['+unreserved+'$,;:@&=+]|'+escaped+')+',
pchar = '(?:['+unreserved+':@&=+$,]|'+escaped+')',
param = pchar+'*',
segment = pchar+'*(?:;'+param+')*',
path_segments = segment+'(?:/'+segment+')*',
path = '/'+path_segments,
query = uric+'*',
fragment = query,
port = '\\:\\d+',
authority = '(?:'+userinfo + '@)?' + host + '(?:'+port+')?';
function makeSchemes(schemes){
return '(?:'+schemes.join('|')+')://';
}
var defaultSchemes = '(?:' + makeSchemes(['http', 'https']) + '|//)';
return function(schemes){
var scheme = schemes && schemes.length ? makeSchemes(schemes) : defaultSchemes,
regexStr = '^' + scheme + authority + '(?:'+path+')?' + '(?:\\?'+query+')?' + '(?:#'+fragment+')?$';
return new RegExp(regexStr, 'i');
};
})();
Попробовать можно будет в следующем релизе underscore.string.
Добавьте зону museum в валидатор URL.
«Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, первый символ обязательно буква):
^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$ „
тут ограничение не 2-20, а 2-21 символа
первый символ не посчитали
^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$ „
тут ограничение не 2-20, а 2-21 символа
первый символ не посчитали
НЛО прилетело и опубликовало эту надпись здесь
E-mail валидировать гораздо сложнее, чем многие думают. Вот приближенный к полному охвату вариантов regexp: ex-parrot.com/~pdw/Mail-RFC822-Address.html
А что мешает использовать \p{L} в режиме юникода, вместо перечисления русских символов?
Описанные регулярки возможно и полезные, но точно не для валидации данных. Они могут использоваться разве для выделения урлов и мейлов в сообщениях, постах и т.п.
В проверке валидности email фигурирует "[A-z0-9]"
но A-z совсем не то-же самое, что и A-Za-z, т.к. включает в себя следующие символы: [ ] ^ _ ` и \ (откройте charmap)
Как минимум это не соответствует regex проверки валидности домена, приведённого выше (где эти символы не включены в разрешённый набор), а как максимум это неверно, т.к. адреса вида name@do\main.ru, name@do[main.ru и name@do]main.ru не валидны.
Я email-ы проверяю такой регуляркой (с ключиком i, поэтому не пишу a-zA-Z):
Ссылку страницу со сравнением результатов проверки разных email этой регулярки и регуляркой по rfc822 (вам уже привели этот 6-КБ regex) я не даю, т.к. опасаюсь хабраэффекта :)
P.S. валидация домена тоже «крива».
но A-z совсем не то-же самое, что и A-Za-z, т.к. включает в себя следующие символы: [ ] ^ _ ` и \ (откройте charmap)
Как минимум это не соответствует regex проверки валидности домена, приведённого выше (где эти символы не включены в разрешённый набор), а как максимум это неверно, т.к. адреса вида name@do\main.ru, name@do[main.ru и name@do]main.ru не валидны.
Я email-ы проверяю такой регуляркой (с ключиком i, поэтому не пишу a-zA-Z):
^(?:[-a-z\d\+\*\/\?!{}`~_%&'=^$#]+(?:\.[-a-z\d\+\*\/\?!{}`~_%&'=^$#]+)*)@(?:[-a-z\d_]+\.){1,60}[a-z]{2,6}$
Ссылку страницу со сравнением результатов проверки разных email этой регулярки и регуляркой по rfc822 (вам уже привели этот 6-КБ regex) я не даю, т.к. опасаюсь хабраэффекта :)
P.S. валидация домена тоже «крива».
За "[A-z0-9]" четвертовать мало
google+adv@gmail.com
google+adv@gmail.com
> Дата в формате DD/MM/YYYY
А где вы такие используете?
В России принято разделять точками, а у американцев запись со слэшами, но сначала идёт месяц, а только потом число.
А где вы такие используете?
В России принято разделять точками, а у американцев запись со слэшами, но сначала идёт месяц, а только потом число.
> Номер кредитки
Кстати, всякие номера банковских карт, ИНН, ОГРН, штрих-коды, номера соц.карты, ОКПО, ОКАТО, ISIN, ISSN, ISBN и прочие номера кроме состава символов полезно валидировать на корректность ввода с помощью контрольного числа, которое содержится в самом номере.
Кстати, всякие номера банковских карт, ИНН, ОГРН, штрих-коды, номера соц.карты, ОКПО, ОКАТО, ISIN, ISSN, ISBN и прочие номера кроме состава символов полезно валидировать на корректность ввода с помощью контрольного числа, которое содержится в самом номере.
За использование по крайней мере некоторых из приведённых регекспов считаю нужным казнить четвертованием (начиная с отрубания рук).
регулярка ip адреса не совсем верная к примеру прокатывает такое:
0.1.2.3
0.1.2.3
Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, первый символ обязательно буква):
^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$
до 21 символа получается…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Регулярные выражения для валидации распространенных видов данных