126 lines
3.3 KiB
JavaScript
126 lines
3.3 KiB
JavaScript
// 校验
|
||
export const validatePhone = (phone) => {
|
||
const reg = /^1[3-9]\d{9}$/;
|
||
return reg.test(phone);
|
||
};
|
||
|
||
|
||
|
||
// arr1是否包含arr2
|
||
export const arrayContainsAll = (arr1, arr2) => {
|
||
return arr2.every(item => arr1.includes(item));
|
||
}
|
||
|
||
export const getImageUrl = (imagePath) => {
|
||
if (!imagePath) return ''
|
||
// 如果图片路径以/uploads开头,直接返回原路径
|
||
const baseURL = "https://minio.zrbjr.com"
|
||
if (imagePath.startsWith('/uploads')) {
|
||
return `${baseURL}/jurongquan${imagePath}`
|
||
}
|
||
|
||
if (imagePath.startsWith('http')) return imagePath
|
||
|
||
// const baseURL = "http://192.168.1.43:3000"
|
||
// const baseURL = "https://www.zrbjr.com"
|
||
|
||
return baseURL + imagePath
|
||
}
|
||
|
||
export const getUserInfo = () => {
|
||
return uni.getStorageSync("user")
|
||
}
|
||
|
||
/**
|
||
* 验证并脱敏电话号码
|
||
* @param {string} phone - 需要验证和脱敏的电话号码
|
||
* @returns {string|boolean} - 脱敏后的电话号码,无效则返回false
|
||
*/
|
||
export function maskPhoneNumber(phone) {
|
||
// 检查是否为字符串
|
||
if (typeof phone !== 'string') {
|
||
return phone;
|
||
}
|
||
|
||
// 移除所有非数字字符
|
||
const cleaned = phone.replace(/\D/g, '');
|
||
|
||
// 验证常见的电话号码格式
|
||
// 支持: 11位手机号(中国大陆)、带区号的固定电话
|
||
const phoneRegex = /^(1[3-9]\d{9})$|^(\d{3,4}-\d{7,8})$|^(\d{3,4}\d{7,8})$/;
|
||
|
||
if (!phoneRegex.test(cleaned) && !phoneRegex.test(phone)) {
|
||
return phone; // 不是有效的电话号码
|
||
}
|
||
|
||
// 根据不同格式进行脱敏
|
||
if (cleaned.length === 11) {
|
||
// 手机号: 保留前3位和后4位,中间4位用*代替
|
||
return cleaned.replace(/^(\d{3})(\d{4})(\d{4})$/, '$1****$3');
|
||
} else if (phone.includes('-')) {
|
||
// 带区号的固定电话: 区号不变,号码中间用*代替
|
||
const [areaCode, number] = phone.split('-');
|
||
if (number.length <= 4) {
|
||
return `${areaCode}-****`;
|
||
}
|
||
return `${areaCode}-${number.substr(0, 2)}****${number.substr(-2)}`;
|
||
} else {
|
||
// 不带区号的固定电话
|
||
if (cleaned.length <= 4) {
|
||
return '****';
|
||
}
|
||
return `${cleaned.substr(0, 2)}****${cleaned.substr(-2)}`;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 姓名脱敏处理
|
||
* @param {string} name - 需要脱敏的姓名
|
||
* @returns {string} - 脱敏后的姓名
|
||
*/
|
||
export function maskName(name) {
|
||
// 检查输入是否为有效字符串
|
||
if (!name || typeof name !== 'string') {
|
||
return '';
|
||
}
|
||
|
||
// 去除前后空格
|
||
const trimmedName = name.trim();
|
||
|
||
// 检查是否为英文姓名(包含空格)
|
||
if (trimmedName.includes(' ')) {
|
||
const parts = trimmedName.split(' ').filter(part => part);
|
||
|
||
// 处理英文名:名全显,姓只显首字母
|
||
if (parts.length >= 2) {
|
||
const firstName = parts.slice(0, -1).join(' ');
|
||
const lastName = parts[parts.length - 1];
|
||
return `${firstName} ${lastName.charAt(0)}*`;
|
||
}
|
||
}
|
||
|
||
// 处理中文姓名
|
||
const length = trimmedName.length;
|
||
|
||
switch (length) {
|
||
case 1:
|
||
// 单字名,不脱敏
|
||
return trimmedName;
|
||
case 2:
|
||
// 双字名,隐藏第二个字
|
||
return `${trimmedName[0]}*`;
|
||
case 3:
|
||
// 三字名,隐藏中间字
|
||
return `${trimmedName[0]}*${trimmedName[2]}`;
|
||
case 4:
|
||
// 四字名(如复姓),隐藏中间两个字
|
||
return `${trimmedName[0]}**${trimmedName[3]}`;
|
||
default:
|
||
// 更长的姓名,显示首尾各两个字,中间用*代替
|
||
if (length > 4) {
|
||
return `${trimmedName.substr(0, 2)}${'*'.repeat(length - 4)}${trimmedName.substr(-2)}`;
|
||
}
|
||
}
|
||
|
||
return trimmedName;
|
||
} |