Pull to refresh

Comments 66

«Целые числа и числа с плавающей точкой» и «Целые числа и с плавающей точкой» — одинаковы, может одно из них удалить?
| Набор из букв и цифр (латиница + кириллица):
| ^[а-яА-Яa-zA-Z0-9]+$

Не верный шаблон т.к. не проглотит букву Ё:

pattern = /^[а-яА-Яa-zA-Z0-9]+$/;
str = 'прёт';
console.log(pattern.test(str));
Ага, так и есть, благодарю. ^[а-яА-ЯёЁa-zA-Z0-9]+$ — так ведь нормально?
Некоторые регулярки слабоваты — слишком тупо валидируют
Емаил: /^[-\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*)
я очень надеялся, что хоть один пост про регулярки будет без этой портянки.
> Вообще то E-mail немного больше судя по RFC822

Почему вы ссылаетесь на устаревший RFC?
Его ещё в 2001 году заменил RFC 2822
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
спасибо, добавил ваши варианты. В доменные зоны добавил ru и su
У вас кучи зон не хватает (и в будущем их будет ещё больше, будете апдейтить регулярку во всех своих проектах?).
А толку то в валидации регулярными выражениями? Они дадут только некоторое подобие правильности введённых данных.

Номер кредитки:
[0-9]{13,16}

Во первых, не любой номер является кредиткой, во вторых, если проверять ввод, то мне вот удобнее было бы вводить со "-", как на самой кредитке написано. Или с пробелами.

Даты в формате позволяют вводить 31 февраля и тому подобные не даты.
IPv4 можно вводить числом.

Если мне не изменяет память, то в ICQ можно добавлять к номеру какое-то число и будет всё тот-же номер, из-за чего уверенно искались и 15-значные числа.

Так что:
Если у программиста есть проблема и он думает — «Я решу ее при помощи регулярных выражений», то с этого момента у программиста уже две проблемы. ©
Да, само собой, использование регулярных выражений в этих случаях не дает сильной защиты от ошибок, но большинство опечаток пользователей она будет отлавливать.
1) Название топика (на текущий момент) «Регулярные выражения для валидации …». Это как-то плохо сочетается с тем, что ошибки оно не отлавливает.

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 в помощь. =) Всё-таки должны же быть исключения из правил.

А если чуть более серьёзно, то баги всё-таки то, что не ожидает разработчик, а если знать где упасть то можно и поставить зомби с носилками соломки постелить.
да, и меня как пользователя сильно раздражает в полях ввода кредитки отсутствие поддержки пробелов, либо ограничение длины номера в поле без учёта пробелов
Регексп на домен не корректен. Необходимо добавить а-Я, ибо например *.рф домены не пройдут.
Не нужно добавлять а-яА-Я (именно так наверное вы имели ввиду)
Нужно переводить домен в пуникод и затем проверять на валидность
регулярка 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?)
MAC-адрес:
([0-9a-fA-F]{2}([:-]|$)){6}$|([0-9a-fA-F]{4}([.]|$)){3}
Ерунда какая-то. Во-первых, лучше выучить regexp, чем пользоваться чем-то, чего не понимаешь. Во-вторых, в номерах кредиток часто ставят пробелы, в ICQ — минусы, в домены бывают локализованные (хоть на арабском), маска IPv6 допускает сколько угодно двоеточий подряд и так далее.
Лучше создать свой велосипед, чем ездить на чужом.
Логика из этой серии.

Конечно лучше выучить регулярные выражения, все языки и т.п., но использование чужого кода сэкономит массу времени.
Ваш Ко.
Ну давайте ещё постить «как проверить переменную на true» или «как сделать цикл от одного до десяти».
Демагогия. Регулярки достаточно сложны, хотя применимость их в основном упирается в задачи валидации.
Причем многие из этих задач стандартны, что демонстрирует этот топик.

Целому ряду программистов, этого топика вполне хватит, на всю программистскую жизнь. Далеко не все становятся гуру.

Нет ничего плохого в том чтобы использовать Смарти, вместо того чтобы писать свой шаблонизатор, точно так же как нет ничего плохого в том, чтобы использовать чужую регулярку вместо написания своей.
Используемые в топике регулярки очень простые. И нет ничего плохо в том, чтобы использовать регулярку, если понимаешь что ты делаешь.
использование чужого кода без понимания черевато велосипедами поверх велосипедов.
использование регулярки, без понимания ее логики, приводит к фразам типа
Если у программиста есть проблема и он думает — «Я решу ее при помощи регулярных выражений», то с этого момента у программиста уже две проблемы. ©

А человек который легко поймет тут приведенные регулярки не будет использовать чужие — ему проще написать свою на этом уровне. Тем более что по крайней мере большинство приведенных регулярок не решают заявленную задачу.

Пароль (Строчные и прописные латинские буквы, цифры):

Расстрелял бы… Пароль должен быть от 0х00 до 0хFF без исключений, как его набирать и запоминать дело пользователя.
пароль должен быть от \u0000 до \uFFFF
В общем, минусую пост, он очень вредный. Валидировать данные такими недоделанными регулярками не нужно.
зато пост поднимает интересный вопрос:
— Какие задачи лучше решать именно регулярками — а какие стоит переложить на плечи других технологий?
Кажется, не очень-то он его поднимает. Скорее он пытается представить, что указанные задачи нужно решать регулярками.
Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, но первый символ обязательно буква):
((^|:)([0-9a-fA-F]{0,4})){1,8}$

да ладна? х)
да, тоже заметил, просто, видимо, автор случайно скопировал предыдущую РЕ'шку
Ваш Кэп
Так и есть. Исправил.
Я недавно писал упрощенный регекпс на урл, у меня получилось слегка посложнее, чем у вас:
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.
//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js — подобные урлы тоже, вобщем-то в большинстве случаев корректны. Ваш регексп их не поймет.
Блин, это было послание автору статьи, а не себе.
Добавьте зону museum в валидатор URL.
«Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, первый символ обязательно буква):
^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$ „
тут ограничение не 2-20, а 2-21 символа
первый символ не посчитали
UFO just landed and posted this here
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):
^(?:[-a-z\d\+\*\/\?!{}`~_%&'=^$#]+(?:\.[-a-z\d\+\*\/\?!{}`~_%&'=^$#]+)*)@(?:[-a-z\d_]+\.){1,60}[a-z]{2,6}$

Ссылку страницу со сравнением результатов проверки разных email этой регулярки и регуляркой по rfc822 (вам уже привели этот 6-КБ regex) я не даю, т.к. опасаюсь хабраэффекта :)

P.S. валидация домена тоже «крива».
> Дата в формате DD/MM/YYYY

А где вы такие используете?
В России принято разделять точками, а у американцев запись со слэшами, но сначала идёт месяц, а только потом число.
> Номер кредитки

Кстати, всякие номера банковских карт, ИНН, ОГРН, штрих-коды, номера соц.карты, ОКПО, ОКАТО, ISIN, ISSN, ISBN и прочие номера кроме состава символов полезно валидировать на корректность ввода с помощью контрольного числа, которое содержится в самом номере.
За использование по крайней мере некоторых из приведённых регекспов считаю нужным казнить четвертованием (начиная с отрубания рук).
За те, которые не пропускают валидные адреса — точно :)
регулярка ip адреса не совсем верная к примеру прокатывает такое:
0.1.2.3

Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, первый символ обязательно буква):
^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$


до 21 символа получается…
Sign up to leave a comment.

Articles