From e1b028d486713eaf55aaf35fbf334aa568059c0d Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期二, 14 四月 2026 15:46:54 +0800
Subject: [PATCH] 项目复制
---
src/utils/ruleGenerator.js | 227 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 227 insertions(+), 0 deletions(-)
diff --git a/src/utils/ruleGenerator.js b/src/utils/ruleGenerator.js
new file mode 100644
index 0000000..7a7aed7
--- /dev/null
+++ b/src/utils/ruleGenerator.js
@@ -0,0 +1,227 @@
+//琛ㄥ崟鏍¢獙瑙勫垯
+
+export const ruleGenerator = {
+ // 蹇呭~瀛楁
+ required(message = '姝ゅ瓧娈典负蹇呭~椤�') {
+ return { required: true, message, trigger: ['blur', 'change'] }
+ },
+
+ // 闀垮害闄愬埗
+ length(min, max, fieldName = '') {
+ const message = fieldName
+ ? `${fieldName}闀垮害搴斿湪${min}鍒�${max}涓瓧绗︿箣闂碻
+ : `闀垮害搴斿湪${min}鍒�${max}涓瓧绗︿箣闂碻
+
+ return {
+ validator: (rule, value, callback) => {
+ if (!value || (value.length >= min && value.length <= max)) {
+ callback()
+ } else {
+ callback(new Error(message))
+ }
+ },
+ trigger: 'blur'
+ }
+ },
+
+ // 鎵嬫満鍙烽獙璇�
+ phone() {
+ return {
+ validator: (rule, value, callback) => {
+ const reg = /^1[3-9]\d{9}$/
+ if (!value || reg.test(value)) {
+ callback()
+ } else {
+ callback(new Error('璇疯緭鍏ユ纭殑鎵嬫満鍙风爜'))
+ }
+ },
+ trigger: ['blur']
+ }
+ },
+ //楠岃瘉鐮侀獙璇�
+ code() {
+ return {
+ validator: (rule, value, callback) => {
+ const reg = /^\d{4}$/
+ if (!value || reg.test(value)) {
+ callback()
+ } else {
+ callback(new Error('璇疯緭鍏ユ纭殑楠岃瘉鐮�'))
+ }
+ },
+ trigger: ['blur', 'change']
+ }
+ },
+ password() {
+ return {
+ validator: (rule, value, callback) => {
+ const reg = /^\d{6}$/
+ if (!value || reg.test(value)) {
+ callback()
+ } else {
+ callback(new Error('瀵嗙爜鏍煎紡涓�6涓瓧绗�'))
+ }
+ },
+ trigger: ['blur', 'change']
+ }
+ },
+
+ // 閭楠岃瘉
+ email() {
+ return {
+ validator: (rule, value, callback) => {
+ const reg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
+ if (!value || reg.test(value)) {
+ callback()
+ } else {
+ callback(new Error('璇疯緭鍏ユ纭殑閭鍦板潃'))
+ }
+ },
+ trigger: 'blur'
+ }
+ },
+
+ // 澶т簬绛変簬0鐨勬鏁存暟楠岃瘉
+ positiveInteger(min = 0) {
+ return {
+ validator: (rule, value, callback) => {
+ if (!value) {
+ callback()
+ } else {
+ // 妫�鏌ユ槸鍚︿负姝f暣鏁颁笖澶т簬绛変簬min
+ const num = Number(value)
+ const isPositiveInteger = Number.isInteger(num) && num >= min && num >= 0
+ if (isPositiveInteger) {
+ callback()
+ } else {
+ callback(new Error(min === 0 ? '璇疯緭鍏ュぇ浜庣瓑浜�0鐨勬鏁存暟' : `璇疯緭鍏ュぇ浜庣瓑浜�${min}鐨勬鏁存暟`))
+ }
+ }
+ },
+ trigger: ['blur', 'change']
+ }
+ },
+
+ // 韬唤璇佸彿楠岃瘉
+ idCard() {
+ return {
+ validator: (rule, value, callback) => {
+ if (!value) {
+ callback()
+ return
+ }
+
+ // 18浣嶈韩浠借瘉姝e垯琛ㄨ揪寮�
+ const reg18 = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/
+ // 15浣嶈韩浠借瘉姝e垯琛ㄨ揪寮忥紙鑰佸紡锛�
+ const reg15 = /^[1-9]\d{5}\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$/
+
+ if (reg18.test(value)) {
+ // 18浣嶈韩浠借瘉鏍¢獙鐮侀獙璇�
+ const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
+ const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
+ let sum = 0
+ for (let i = 0; i < 17; i++) {
+ sum += parseInt(value[i]) * weights[i]
+ }
+ const checkCode = checkCodes[sum % 11]
+ if (checkCode.toUpperCase() === value[17].toUpperCase()) {
+ callback()
+ } else {
+ callback(new Error('璇疯緭鍏ユ纭殑韬唤璇佸彿鐮�'))
+ }
+ } else if (reg15.test(value)) {
+ // 15浣嶈韩浠借瘉鏍¢獙閫氳繃
+ callback()
+ } else {
+ callback(new Error('璇疯緭鍏ユ纭殑韬唤璇佸彿鐮�'))
+ }
+ },
+ trigger: ['blur', 'change']
+ }
+ },
+
+ // 缁熶竴绀句細淇$敤浠g爜楠岃瘉
+ creditCode() {
+ return {
+ validator: (rule, value, callback) => {
+ if (!value) {
+ callback()
+ return
+ }
+
+ // 缁熶竴绀句細淇$敤浠g爜鐢�18浣嶅瓧绗︾粍鎴愶細1浣嶇櫥璁扮鐞嗛儴闂ㄤ唬鐮� + 1浣嶆満鏋勭被鍒唬鐮� + 6浣嶇櫥璁扮鐞嗘満鍏宠鏀垮尯鍒掔爜 + 9浣嶄富浣撹瘑鍒爜锛堢粍缁囨満鏋勪唬鐮侊級 + 1浣嶆牎楠岀爜
+ const reg = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/
+
+ if (!reg.test(value)) {
+ callback(new Error('璇疯緭鍏ユ纭殑缁熶竴绀句細淇$敤浠g爜'))
+ return
+ }
+
+ // 鏍¢獙鐮佽绠�
+ const weights = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28]
+ const checkCodes = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'T', 'U', 'W', 'X', 'Y']
+
+ let sum = 0
+ for (let i = 0; i < 17; i++) {
+ const char = value[i]
+ // 灏嗗瓧绗﹁浆鎹负瀵瑰簲鐨勬暟鍊�
+ const num = char >= '0' && char <= '9' ? parseInt(char) : char.charCodeAt(0) - 55
+ sum += num * weights[i]
+ }
+
+ const mod = 31
+ const remainder = sum % mod
+ const checkCode = checkCodes[(mod - remainder) % mod]
+
+ if (checkCode === value[17].toUpperCase()) {
+ callback()
+ } else {
+ callback(new Error('璇疯緭鍏ユ纭殑缁熶竴绀句細淇$敤浠g爜'))
+ }
+ },
+ trigger: ['blur', 'change']
+ }
+ },
+
+ // 閲戦楠岃瘉锛堜繚鐣�2浣嶅皬鏁帮級
+ money(min = 0) {
+ return {
+ validator: (rule, value, callback) => {
+ if (!value) {
+ callback()
+ return
+ }
+
+ // 閲戦姝e垯锛氭暣鏁伴儴鍒嗕笉闄愪綅鏁帮紝灏忔暟閮ㄥ垎鏈�澶�2浣�
+ const reg = /^(0|[1-9]\d*)(\.\d{1,2})?$/
+
+ if (!reg.test(value)) {
+ callback(new Error('璇疯緭鍏ユ纭殑閲戦'))
+ return
+ }
+
+ const num = parseFloat(value)
+ if (num < min) {
+ callback(new Error(`閲戦涓嶈兘灏忎簬${min}`))
+ } else {
+ callback()
+ }
+ },
+ trigger: ['blur', 'change']
+ }
+ },
+ // 澶氶�夋楠岃瘉
+ checkbox(message) {
+ return {
+ validator: (rule, value, callback) => {
+ if (!value) {
+ callback(new Error(message));
+ } else {
+ callback();
+ }
+ },
+ trigger: 'change'
+ }
+ },
+}
\ No newline at end of file
--
Gitblit v1.8.0