[Коллекция] Компиляция и примеры распространенных регулярных выражений JavaScript

JavaScript

1 Обзор

1.1 Предисловие

В настоящее время собрано 21 часто используемое регулярное выражение JavaScript, включая имя пользователя, надежность пароля, целое число, число, адрес электронной почты (Email), номер мобильного телефона, идентификационный номер, URL-адрес, IP-адрес, шестнадцатеричный цвет, дату, идентификатор WeChat, номерной знак, китайский обычный и т. д. Необходима обработка валидации формы, спешите забрать ее!

Он также присоединится к новому регулярным доходам, каждый будет обеспечивать более ценные комментарии!

2 Обычный список

2.1 Обычное имя пользователя

2.1.1 Обычное базовое имя пользователя

При регистрации пользователя будет использоваться регулярная проверка имени пользователя.

Определите основные правила именования имен пользователей следующим образом:

  • Минимум 4 цифры, максимум 16 цифр {4,16}
  • Может содержать строчные буквы [a-z] и прописные буквы [A-Z]
  • Может содержать числа [0-9]
  • Может содержать символы подчеркивания [_] и знаки минус [-]
  • Первая буква может быть только прописной и строчной
var pattern = /^[a-zA-Z][a-zA-Z0-9_-]{3,15}$/;
//输出 true
console.log("ifat3 : "+pattern.test('ifat3'));
//输出 true
console.log("Ifat3 : "+pattern.test('Ifat3'));
//输出 true
console.log("ke30 : "+pattern.test('ke30'));
//输出 false
console.log("30ke : "+pattern.test('30ke'));
//输出 false
console.log("ke3 : "+pattern.test('ke3'));
输出 false
console.log("ke30@ : "+pattern.test('ke30@'));
//输出 false
console.log("ke30ke30ke30ke30ke30 : "+pattern.test('ke30ke30ke30ke30ke30'));

Посмотреть примеры программ

2.1.2 Обычное китайское имя пользователя

Если в правиле разрешены китайские имена пользователей, измените регулярное выражение следующим образом:

var pattern = /^[a-zA-Z\u4E00-\u9FA5][a-zA-Z0-9\u4E00-\u9FA5_-]{3,15}$/;
//输出 true
console.log("ifat3 : "+pattern.test('ifat3'));
//输出 true
console.log("Ifat3 : "+pattern.test('Ifat3'));
//输出 true
console.log("三十课毛瑞 : "+pattern.test('三十课毛瑞'));
//输出 false
console.log("30ke : "+pattern.test('30ke'));
//输出 false
console.log("ke3 : "+pattern.test('ke3'));
//输出 false
console.log("ke30@ : "+pattern.test('ke30@'));
  //输出 false
console.log("ke30ke30ke30ke30ke30 : "+pattern.test('ke30ke30ke30ke30ke30'));

в[\u4E00-\u9FA5]Это регулярное сопоставление китайских иероглифов, включая более 20 000 основных китайских иероглифов, из которых\u4E00Обозначает китайский иероглиф "один". Подробнее см. в разделе "Область кодирования Unicode китайских иероглифов".

Посмотреть примеры программ

2.2 Регулировка надежности пароля

//密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;
//输出 true
console.log("iFat3#:"+pPattern.test("iFat3#"));

Приведенные выше регулярные выражения могут выполнять только базовую оценку надежности пароля пользователя.Дополнительную информацию о проверке надежности пароля см.Анализ и реализация алгоритма определения надежности пароля на основе оценки правил.

Посмотреть примеры программ

2.3 Закономерность корреляции чисел

2.3.1 Целочисленная регуляризация

//正整数正则
var posPattern = /^\d+$/;
//负整数正则
var negPattern = /^-\d+$/;
//整数正则
var intPattern = /^-?\d+$/;
//输出 true
console.log("30:"+posPattern.test("30"));
//输出 true
console.log("-30:"+negPattern.test("-30"));
//输出 true
console.log("-30:"+intPattern.test("-30"));

Посмотреть примеры программ

2.3.2 Обычные числа с плавающей запятой

//正浮点数正则
var posPattern = /^\d*\.\d+$/;
//负浮点数正则
var negPattern = /^-\d*\.\d+$/;
//两位小数正则
var twoPattern = /^-?\d*\.\d{2}$/;  
//输出 true
console.log("30.2:"+posPattern.test("30.2"));
//输出 true  
console.log("-30.2:"+negPattern.test("-30.2"));
//输出 true  
console.log("-30.22:"+twoPattern.test("-30.22"));

Посмотреть примеры программ

2.3.3 Регулярная целочисленная плавающая точка

Может быть целым числом или числом с плавающей запятой

//正数正则
var posPattern = /^\d*\.?\d+$/;
//负数正则
var negPattern = /^-\d*\.?\d+$/;
//数字正则
var numPattern = /^-?\d*\.?\d+$/;
//输出 true
console.log("30.2:"+posPattern.test("30.2"));
//输出 true  
console.log("-30.2:"+negPattern.test("-30.2"));
//输出 true  
console.log("-30.2:"+numPattern.test("-30.2"));

Посмотреть примеры программ

2.4 Обычная дата

2.4.1 Обычная дата рождения

var pattern = /^((19[2-9]\d{1})|(20((0[0-9])|(1[0-8]))))\-((0?[1-9])|(1[0-2]))\-((0?[1-9])|([1-2][0-9])|30|31)$/;
//输出 true
console.log(pattern.test("1923-3-18"));
//输出 true
console.log(pattern.test("1923-4-31"));
//输出 true
console.log(pattern.test("1923-2-29"));
//输出 true
console.log(pattern.test("2016-2-29"));

Вышеупомянутая регулярная проверка не идеальна, в основном количество дней в феврале, апреле, июне, сентябре и ноябре.

Посмотреть примеры программ

2.4.2 Общая дата регуляризация

//日期正则,复杂判定
var dP2 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
//输出 true
console.log(dP2.test("2017-02-11"));
//输出 false
console.log(dP2.test("2017-15-11"));
//输出 false
console.log(dP2.test("2017-02-29"));

Посмотреть примеры программ

2.5 Обычная электронная почта

2.5.1 Обычная базовая электронная почта

var pattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
//输出 true
console.log(pattern.test('cn30ke@163.com'));
//输出 true
console.log(pattern.test('ifat3@sina.com.cn'));
//输出 true
console.log(pattern.test('ifat3.it@163.com'));
//输出 true
console.log(pattern.test('ifat3_-.@30ke.cn'));
//输出 false
console.log(pattern.test('ifat3@30ke.online'));
//输出 false
console.log(pattern.test('毛瑞@30ke.cn'));

Обычное регулярное выражение электронной почты является наиболее часто используемым методом проверки и подходит для большинства сценариев приложений. Из приведенного выше теста видно, что выражение не поддерживает доменные имена, оканчивающиеся на .online и .store. Чтобы быть совместимым с этим типом доменного имени (более 4 цифр), измените обычное окончание{2,4}Ограниченная часть{2,8}). Другая проблема заключается в том, что имена пользователей электронной почты не могут включать китайский язык.

Посмотреть примеры программ

2.5.2 Обычное китайское имя Электронная почта

В соответствии с проблемой предыдущей регуляризации добавляются два дополнительных правила:

  • Имя пользователя может включать китайский язык[\u4e00-\u9fa5]
  • Окончание доменного имени может содержать до 8 символов.{2,8}
var pattern = /^([A-Za-z0-9_\-\.\u4e00-\u9fa5])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,8})$/;
//输出 true
console.log(pattern.test('cn30ke@163.com'));
//输出 true
console.log(pattern.test('ifat3@sina.com.cn'));
//输出 true
console.log(pattern.test('ifat3.it@163.com'));
//输出 true
console.log(pattern.test('ifat3_-.@30ke.cn'));
//输出 true
console.log(pattern.test('ifat3@30ke.online'));
//输出 true
console.log(pattern.test('毛瑞@30ke.cn'));

Посмотреть примеры программ

2.5.3 Правила электронной почты для определенных доменных имен

До появления проверочного кода мобильного телефона единственным условием обеспечения уникальности пользователя была практически проверка по электронной почте. Появление временных почтовых ящиков (также известных как 10-минутные почтовые ящики или одноразовые почтовые ящики) делает бессмысленным механизм проверки почтового ящика и активации учетной записи. Адрес временного почтового ящика нельзя перечислить, мы можем использовать только метод белого списка и позволить пройти проверку только ограниченному количеству доменных имен почтовых ящиков.

var pattern = /^([A-Za-z0-9_\-\.])+\@(163.com|qq.com|30ke.cn)$/;
//输出 true
console.log(pattern.test('cn30ke@163.com'));
//输出 false
console.log(pattern.test('ifat3@sina.com.cn'));
//输出 true
console.log(pattern.test('ifat3.it@163.com'));
//输出 true
console.log(pattern.test('ifat3_-.@30ke.cn'));
//输出 false
console.log(pattern.test('ifat3@30ke.online'));
//输出 false
console.log(pattern.test('毛瑞@30ke.cn'));

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

Массив белого списка общих доменных имен:

var domains= ["qq.com","163.com","vip.163.com","263.net","yeah.net","sohu.com","sina.cn","sina.com","eyou.com","gmail.com","hotmail.com"];

В приведенном выше белом списке перечислены только 11 часто используемых доменных имен электронной почты, и вы можете добавлять или удалять их по мере необходимости.

Посмотреть примеры программ

2.6 Обычный номер телефона

//手机号正则
var mPattern = /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/;
//输出 true
console.log(mPattern.test("18600000000"));

Посмотреть примеры программ

2.7 Обычный идентификационный номер

//身份证号(18位)正则
var cP = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
//输出 true
console.log(cP.test("11010519880605371X"));

Вышеуказанные правила могут выполнять только базовое суждение по идентификационным номерам.Для получения дополнительной информации о суждениях по идентификационным номерам граждан см. документ:Оценка правильности идентификационного номера гражданина и реализация программы

Посмотреть примеры программ

2.8 Регуляризация URL-адресов

//URL正则
var urlP= /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
//输出 true
console.log(urlP.test("http://30ke.cn"));

Посмотреть примеры программ

2.9 IP-адрес

2.9.1 Обычный адрес IPv4

//ipv4地址正则
var ipP = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
//输出 true
console.log(ipP.test("115.28.47.26"));

Посмотреть примеры программ

2.9.2 Адрес IPv6 Регулярный

//IPV6正则
var pattern = /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/;
//输出 true
console.log(pattern.test("fe80:0000:0000:0000:0204:61ff:fe9d:f156"));

Посмотреть примеры программ

2.10 Шестнадцатеричная регуляризация цвета

//RGB Hex颜色正则
var cPattern = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/;
//输出 true
console.log(cPattern.test("#b8b8b8"));

Посмотреть примеры программ

2.11 Обычный номер QQ

//QQ号正则,5至11位
var qqPattern = /^[1-9][0-9]{4,10}$/;
//输出 true
console.log(qqPattern.test("65974040"));

Посмотреть примеры программ

2.12 Обычный WeChat

//微信号正则,6至20位,以字母开头,字母,数字,减号,下划线
var wxPattern = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;
//输出 true
console.log(wxPattern.test("RuilongMao"));

Посмотреть примеры программ

2.13 Обычный номерной знак

//车牌号正则
var cPattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;
//输出 true
console.log(cPattern.test("京K39006"));

Посмотреть примеры программ

2.14 Содержит китайские регулярные выражения

//包含中文正则
var cnPattern = /[\u4E00-\u9FA5]/;
//输出 true
console.log(cnPattern.test("30课"));

Посмотреть примеры программ

3 концовка

3.1 Заключение

Мой уровень ограничен, если я ошибаюсь, пожалуйста, поправьте меня! Благодарю.