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 Заключение
Мой уровень ограничен, если я ошибаюсь, пожалуйста, поправьте меня! Благодарю.