127 lines
3.8 KiB
TypeScript
127 lines
3.8 KiB
TypeScript
/**
|
||
* 有效IPv4格式地址
|
||
*/
|
||
export const regExpIPv4 =
|
||
/^((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]?)$/;
|
||
|
||
/**
|
||
* 有效IPv6格式地址
|
||
*/
|
||
export const regExpIPv6 =
|
||
/^(?:(?:[0-9A-Fa-f]{1,4}:){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}%\w+|::(?:ffff(?::0{1,4}){0,1}:){0,1}(?:(?:2[0-4]|1\d|[1-9])?\d|25[0-5])\.(?:(?:2[0-4]|1\d|[1-9])?\d|25[0-5])\.(?:(?:2[0-4]|1\d|[1-9])?\d|25[0-5])\.(?:(?:2[0-4]|1\d|[1-9])?\d|25[0-5])|(?:[0-9A-Fa-f]{1,4}:){1,4}:192\.88\.99\.(\d{1,3})|(?:[0-9A-Fa-f]{1,4}:){1,4}:192\.0\.2\.(\d{1,3})|(?:[0-9A-Fa-f]{1,4}:){1,4}:(?:[0-9A-Fa-f]{1,4}:){0,1}192\.0\.0\.(\d{1,3})|ff00:(?::[0-9A-Fa-f]{0,4}){0,4}|(?:[0-9A-Fa-f]{1,4}:){1,4}:255\.255\.255\.255)$/i;
|
||
|
||
/**
|
||
* 有效端口格式
|
||
*/
|
||
export const regExpPort =
|
||
/^([0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/;
|
||
|
||
/**
|
||
* 有效账号格式
|
||
*
|
||
* 账号只能包含大写字母、小写字母和数字的字符串,长度至少为6位
|
||
*/
|
||
export const regExpUserName = /^[A-Za-z0-9]{6,}$/;
|
||
|
||
/**
|
||
* 有效密码格式
|
||
*
|
||
* 密码至少包含大小写字母、数字、特殊符号,且不少于6位
|
||
* /^(?![A-Za-z0-9]+$)(?![a-z0-9\W]+$)(?![A-Za-z\W]+$)(?![A-Z0-9\W]+$)[a-zA-Z0-9\W]{6,}$/
|
||
*/
|
||
export const regExpPasswd = /^.{6,}$/;
|
||
|
||
/**
|
||
* 有效手机号格式
|
||
* /^1[3|4|5|6|7|8|9][0-9]\d{8}$/
|
||
*/
|
||
export const regExpMobile = /^.{3,}$/;
|
||
|
||
/**
|
||
* 有效邮箱格式
|
||
*/
|
||
export const regExpEmail =
|
||
/^(([^<>()\\.,;:\s@"]+(\.[^<>()\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/;
|
||
|
||
/**
|
||
* 有效用户昵称格式
|
||
*
|
||
* 用户昵称只能包含字母、数字、中文和下划线,且不少于2位
|
||
* /^[\w\u4e00-\u9fa5-]{2,}$/
|
||
*/
|
||
export const regExpNick = /^.{2,}$/;
|
||
|
||
/**
|
||
* 是否为http(s)://开头
|
||
*/
|
||
export const regExpHttp = /^http(s)?:\/\/+/;
|
||
|
||
/**
|
||
* 判断是否为http(s)://开头
|
||
* @param link 网络链接
|
||
* @returns true | false
|
||
*/
|
||
export function validHttp(link: string): boolean {
|
||
if (!link) return false;
|
||
return regExpHttp.test(link);
|
||
}
|
||
|
||
/**
|
||
* 判断是否有效URL地址
|
||
* @param str 网络链接
|
||
* @returns true | false
|
||
*/
|
||
export function validURL(str: string) {
|
||
if (
|
||
str === '' ||
|
||
str.length >= 2083 ||
|
||
str.length <= 3 ||
|
||
str.startsWith('.')
|
||
) {
|
||
return false;
|
||
}
|
||
let strTemp = str;
|
||
if (str.includes(':') && !str.includes('://')) {
|
||
// support no indicated urlscheme but with colon for port number
|
||
// http:// is appended so url.Parse will succeed, strTemp used so it does not impact rxURL.MatchString
|
||
strTemp = 'http://' + str;
|
||
}
|
||
|
||
let u = { host: '', pathname: '' };
|
||
try {
|
||
new URL(strTemp);
|
||
} catch (error) {
|
||
return false;
|
||
}
|
||
|
||
if (u.host.startsWith('.')) {
|
||
return false;
|
||
}
|
||
if (u.host === '' && u.pathname !== '' && !u.pathname.includes('.')) {
|
||
return false;
|
||
}
|
||
|
||
// 正则表达式模式(rxURL)未提供,无法进行具体判断
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 判断是否为有效手机号格式
|
||
* @param mobile 手机号字符串
|
||
* @returns true | false
|
||
*/
|
||
export function validMobile(mobile: string): boolean {
|
||
if (!mobile) return false;
|
||
return regExpMobile.test(mobile);
|
||
}
|
||
|
||
/**
|
||
* 判断是否为有效邮箱格式
|
||
* @param email 邮箱字符串
|
||
* @returns true | false
|
||
*/
|
||
export function validEmail(email: string): boolean {
|
||
if (!email) return false;
|
||
return regExpEmail.test(email);
|
||
}
|