经纬度
// 经度 dd:mm:ss.ssssssE/W
export const lngReg =
/^(((((0?[0-9]?[0-9]|1[0-7][0-9]):[0-5][0-9]:[0-5][0-9])(\.\d{1,6})?)|((180:00:00)(.000000)?))[E|W]|[0])$/;
// 纬度 dd:mm:ss.ssssssE/W
export const latReg = /^((0?[0-8]?[0-9]:[0-5][0-9]:[0-5][0-9](\.\d{1,6})?)[N|S]|[0])$/;
// xyz,最多四位小数
export const xyzReg = /^(\-|\+)?[0-9]+(\.[0-9]{1,4})?$/;
// h,最多四位小数
export const hReg = /^(\-|\+)?[0-9]+(\.[0-9]{1,4})?$/;
表单常用
// ip
export const ipReg = /^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/;
// url
export const urlReg = /^[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]$/;
// 纯数字组成
export const digitReg = (str) => {
let pattern = /^\d+$/;
return pattern.test(str);
};
// 纯字母
export const charReg = (str) => {
let pattern = /^[a-zA-Z]+$/;
return pattern.test(str);
};
// 数字+字母组成,同时包含数字、字母
export const digitCharAllReg = (str) => {
let pattern = /^(?=.*[a-zA-Z])(?=.*\d).+$/;
return pattern.test(str);
};
// 数字+字母组成,不必要同时包含
export const digitCharSomeReg = (str) => {
let pattern = /^[A-Za-z0-9]+$/;
return pattern.test(str);
};
校验开闭区间
// 校验开闭区间
// (1, 10):代表 1 < x < 10;
// (1, 10]:代表 1 < x <= 10;
// [1, 10]:代表 1 <= x <= 10;
// [1, 10):代表 1 <= x < 10;
// (1, ) 或 (1, ]:代表 x > 1;
// [1, ] 或 [1, ):代表 x >= 1;
// (, 10) 或 [, 10):代表 x < 10;
// (, 10] 或 [, 10]:代表 x <= 10;
const isValidNumRange = (numRange) => {
const NUM_RANGE_PATTERN = /[[|(][\d+],[\d+][\]|)]/; //(1, 10)
const LEFT_NUM_RANGE_PATTERN = /[[|(]\d+,\s?[\])|)]/; //(1, )
const RIGHT_NUM_RANGE_PATTERN = /[[|(][\d+],[\d+][\]|)]/; //(, 10)
return (
NUM_RANGE_PATTERN.test(numRange) ||
LEFT_NUM_RANGE_PATTERN.test(numRange) ||
RIGHT_NUM_RANGE_PATTERN.test(numRange)
);
};
const inNumRange = (number, numRange) => {
if (!isValidNumRange(numRange)) {
return false;
}
let pairs = numRange.split(',');
let rangeNums = Array.from(pairs).map((item) => item.replaceAll(/[(|)|\]\[|\\]/g, ''));
let minValue = '' == rangeNums[0] ? null : Number(rangeNums[0]);
let maxValue = '' == rangeNums[1] ? null : Number(rangeNums[1]);
// 判定数值是否大于最小值
let minMatched =
minValue == null || (pairs[0].startsWith('[') ? number >= minValue : number > minValue);
// 判定数值是否小于最大值
let maxMatched =
maxValue == null || (pairs[1].endsWith(']') ? number <= maxValue : number < maxValue);
return minMatched && maxMatched;
};
console.log(inNumRange(1, "(0, 2]")) //true
console.log(inNumRange(1, "(, 2]")) //true
console.log(inNumRange(1, "(1, 4]")) //false
console.log(inNumRange(1, "(0, ]")); //false