184 lines
5.2 KiB
Plaintext
184 lines
5.2 KiB
Plaintext
import { FORM_RULE_SELF, FORM_VAILD_FUN } from "./interface.uts";
|
|
import { FORM_RULE, FORM_RULE_TYPE } from "../../interface.uts";
|
|
|
|
function getDefaultRule(rule : FORM_RULE) : FORM_RULE_SELF {
|
|
let type : FORM_RULE_TYPE = rule?.type ?? ''
|
|
let errorMessage : string = rule?.errorMessage ?? '请正确填写/选择'
|
|
let max : number = rule?.max ?? -1
|
|
let min : number = rule?.min ?? 1
|
|
let selfvaild:FORM_VAILD_FUN|null = rule.valid
|
|
let validfaun : FORM_VAILD_FUN | null = selfvaild
|
|
let trigger:string = rule?.trigger??'change'
|
|
return {
|
|
type, errorMessage, max, min, valid: validfaun,trigger
|
|
} as FORM_RULE_SELF
|
|
}
|
|
function vaild(val : any | null, rule : FORM_RULE_SELF) : boolean {
|
|
if (rule.type != '') return vaildBytType(val, rule)
|
|
if (val == null) return false;
|
|
// #ifdef APP-IOS || WEB || MP-WEIXIN || APP-HARMONY
|
|
if (val == undefined) return false;
|
|
// #endif
|
|
if (typeof val === 'string') {
|
|
let vallen = (val as string).trim().split('').length
|
|
if (rule.max == -1) return vallen >= rule.min
|
|
return vallen >= rule.min && vallen <= rule.max;
|
|
}
|
|
if (Array.isArray(val)) {
|
|
let vallen = (val as any[]).length
|
|
if (rule.max == -1) return vallen >= rule.min
|
|
return vallen >= rule.min && vallen <= rule.max;
|
|
}
|
|
if (typeof val === 'boolean') {
|
|
return val as boolean;
|
|
}
|
|
if (typeof val === 'number') {
|
|
if (isNaN(val as number)) {
|
|
return false;
|
|
}
|
|
let vallen = val as number
|
|
if (rule.max == -1) return vallen >= rule.min
|
|
return vallen >= rule.min && vallen <= rule.max;
|
|
}
|
|
// #ifdef APP-ANDROID
|
|
if (typeof val == 'Int') {
|
|
let vallen = val as Int
|
|
if (rule.max == -1) return vallen >= rule.min.toInt()
|
|
return vallen >= rule.min.toInt() && vallen <= rule.max.toInt();
|
|
}
|
|
if (typeof val == 'Float') {
|
|
let vallen = val as Float
|
|
if (rule.max == -1) return vallen >= rule.min.toFloat()
|
|
return vallen >= rule.min.toFloat() && vallen <= rule.max.toFloat();
|
|
}
|
|
if (typeof val == 'Double') {
|
|
let vallen = val as Double
|
|
if (rule.max == -1) return vallen >= rule.min.toDouble()
|
|
return vallen >= rule.min.toDouble() && vallen <= rule.max.toDouble();
|
|
}
|
|
if (typeof val == 'Long') {
|
|
let vallen = val as Long
|
|
if (rule.max == -1) return vallen >= rule.min.toLong()
|
|
return vallen >= rule.min.toLong() && vallen <= rule.max.toLong();
|
|
}
|
|
|
|
// #endif
|
|
|
|
// #ifdef APP-IOS || WEB || MP-WEIXIN || APP-HARMONY
|
|
if (val == undefined) {
|
|
return false;
|
|
}
|
|
// #endif
|
|
|
|
|
|
return false;
|
|
}
|
|
|
|
export function formVaild(val : any | null, rule : FORM_RULE) : boolean {
|
|
let rulereal = getDefaultRule(rule)
|
|
let selfVaildFun = rulereal?.valid??null;
|
|
let isPass = true;
|
|
// #ifdef APP-IOS || WEB || MP-WEIXIN || APP-HARMONY
|
|
isPass = (selfVaildFun == null||selfVaildFun == undefined) ? vaild(val, rulereal) : selfVaildFun(val)
|
|
// #endif
|
|
// #ifdef APP-ANDROID
|
|
|
|
isPass = selfVaildFun == null ? vaild(val, rulereal) : selfVaildFun(val)
|
|
// #endif
|
|
|
|
return isPass
|
|
}
|
|
/** 指定了type的情况下. */
|
|
export function vaildBytType(val : any | null, rule : FORM_RULE_SELF) : boolean {
|
|
|
|
if (val == null) return false;
|
|
// #ifdef APP-IOS || WEB || MP-WEIXIN || APP-HARMONY
|
|
if (val == undefined) return false;
|
|
// #endif
|
|
if (rule.type == 'string') {
|
|
let vallen = (val as string).trim().split('').length
|
|
if (rule.max == -1) return vallen >= rule.min
|
|
return vallen >= rule.min && vallen <= rule.max;
|
|
}
|
|
if (rule.type == 'array') {
|
|
let vallen = (val as any[]).length
|
|
if (rule.max == -1) return vallen >= rule.min
|
|
return vallen >= rule.min && vallen <= rule.max;
|
|
}
|
|
if (rule.type == 'boolean') {
|
|
return val as boolean;
|
|
}
|
|
if (rule.type == 'number') {
|
|
let v = 0;
|
|
if(typeof val != 'number'&&typeof val != 'string') return false;
|
|
|
|
// #ifdef APP
|
|
if (typeof val == 'Int') {
|
|
let vallen = val as Int
|
|
v = vallen + 0
|
|
}
|
|
if (typeof val == 'Float') {
|
|
let vallen = val as Float
|
|
v = vallen + 0
|
|
}
|
|
if (typeof val == 'Double') {
|
|
let vallen = val as Double
|
|
v = vallen + 0
|
|
}
|
|
if (typeof val == 'Long') {
|
|
let vallen = val as Long
|
|
v = vallen + 0
|
|
}
|
|
|
|
// #endif
|
|
|
|
if(typeof val == 'number'){
|
|
v = val as number;
|
|
}else if(typeof val == 'string'){
|
|
let pv = val as string;
|
|
let vazhi = parseFloat(pv)
|
|
if (isNaN(vazhi)) {
|
|
return false;
|
|
}
|
|
v = vazhi;
|
|
}
|
|
|
|
let vallen =v
|
|
if (rule.max == -1) return vallen >= rule.min
|
|
return vallen >= rule.min && vallen <= rule.max;
|
|
}
|
|
|
|
if(rule.type == 'phone'){
|
|
let vallen = ''
|
|
if(typeof val == 'string'){
|
|
vallen = val as string;
|
|
}else if(typeof val == 'number'){
|
|
vallen = (val as number).toString()
|
|
}
|
|
let reg = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
|
|
return reg.test(vallen)
|
|
}
|
|
if(rule.type == 'email'){
|
|
let vallen = val as string;
|
|
let reg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
|
return reg.test(vallen)
|
|
}
|
|
if(rule.type == 'UTSJSON'){
|
|
let vallen = val as UTSJSONObject;
|
|
let mapkeys = vallen.toMap()
|
|
let len = mapkeys.size
|
|
if (rule.max == -1) return len >= rule.min
|
|
return len >= rule.min && len <= rule.max;
|
|
}
|
|
if(rule.type == 'date'&& (typeof val == 'string')){
|
|
let vallen = val as string;
|
|
let date = new Date(vallen)
|
|
let times = date.getTime()
|
|
if(isNaN(times)) return false;
|
|
let len = times
|
|
if (rule.max == -1) return len >= rule.min
|
|
return len >= rule.min && len <= rule.max;
|
|
}
|
|
|
|
return false;
|
|
} |