1/** 2 * æ ¡éªè¡¨ååæ®µæ¯å¦ç¬¦åè¦æ± 3 * @param {Array|Object} validationform æ ¡éªè§åï¼æ ¼å¼ä¸º 4 * [ 5 { 6 required?:bloolean, é»è®¤ä¸ºtrue 7 key:string, å¿ å¡«-åæ®µå 8 value:string, å¿ å¡«-åæ®µå¼ 9 message?:string, é误æç¤º çä»·äº errorMessage.required 10 maxLength?:number, æå¤§é¿åº¦ 11 validate?:function, èªå®ä¹æ ¡éªå½æ° 12 regex?:string, æ£åè¡¨è¾¾å¼ 13 invalidWords?:Array ä¸å 许åºç°çå符 14 errorMessage?:Object é误æç¤º 15 } 16 ... 17 ] 18 * @returns {Object} æ ¡éªç»æå¯¹è±¡ï¼æ ¼å¼ä¸º 19 { 20 isValid: boolean, æ ¡éªæ¯å¦éè¿ 21 message: string, é误æç¤º 22 values: Object, åæ®µå¼ 23 } 24 */ 25function validateForm(validationform) { 26 const valValid = { 27 isValid: true, 28 values: {}, 29 }; 30 if (!Array.isArray(validationform)) { 31 validationform = [validationform]; 32 } 33 // ä¸å 许åºç°çå符 34 const disallowedChars = [ 35 "http", 36 "https", 37 "loan", 38 "loans", 39 "debt", 40 "debts", 41 "essay", 42 "essays", 43 "???", 44 ] 45 46 // åºå®æ ¡éªå段 47 const validationRules = [ 48 { 49 key: "product", 50 maxLength: 200, 51 invalidWords: disallowedChars, 52 required: true, 53 errorMessage: { 54 required: "Product is required.", 55 maxLength: "Product name is too long. Please shorten it.", 56 invalidWords: "Please enter a valid product name.", 57 }, 58 }, 59 { 60 key: ["username", "name"], 61 maxLength: 50, 62 invalidWords: disallowedChars, 63 required: true, 64 errorMessage: { 65 required: "Your Name is required.", 66 maxLength: "Name is too long. Please use fewer characters.", 67 invalidWords: "Please enter a valid name.", 68 }, 69 }, 70 { 71 key: "phone", 72 maxLength: 50, 73 regex: /^[0-9+\-\(\))]{1,50}$/, 74 required: true, 75 errorMessage: { 76 required: "Your Phone is required.", 77 invalid: "Please enter a valid phone number.", 78 }, 79 }, 80 { 81 key: "email", 82 maxLength: 100, 83 regex: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, 84 required: true, 85 errorMessage: { 86 required: "Your Email is required.", 87 maxLength: 88 "Email address is too long. Please use fewer characters.", 89 invalid: "Please enter a valid email address.", 90 }, 91 }, 92 { 93 key: "message", 94 maxLength: 500, 95 required: true, 96 errorMessage: { 97 required: "Comments is required.", 98 maxLength: "Comments is too long. Please shorten it.", 99 }, 100 }, 101 ]; 102 103 for (const index in validationform) { 104 let valid = validationform[index] 105 // required é»è®¤ä¸ºtrue 106 if (!("required" in valid)) { 107 valid.required = true; 108 } 109 let rule = validationRules.find((rule) => { 110 if (Array.isArray(rule.key)) { 111 return rule.key.includes(valid.key); 112 } else { 113 return rule.key == valid.key; 114 } 115 }); 116 if (rule) { 117 validationform[index] = { ...rule, ...valid }; 118 } 119 if (valid.message) { 120 if (!valid.errorMessage) { 121 valid.errorMessage = {}; 122 } 123 valid.errorMessage.required = valid.message; 124 } 125 } 126 console.log(validationform, "validationform"); 127 128 for (const [index, rule] of Object.entries(validationform)) { 129 const value = (rule.value + "" || "").trim(); 130 const errorMessage = rule.errorMessage; 131 if (rule.required && !value) { 132 valValid.message = errorMessage.required; 133 valValid.isValid = false; 134 } else if (!rule.required && !value) { 135 // 妿䏿¯å¿ 填项ä¸å¼ä¸ºç©ºï¼åè·³è¿æææ ¡éª 136 continue; 137 } else if (rule.maxLength && value.length > rule.maxLength) { 138 valValid.message = errorMessage.maxLength; 139 valValid.isValid = false; 140 } else if (rule.invalidWords && containsInvalidWords(value, rule.invali
140dWords)) { 141 valValid.message = errorMessage.invalidWords; 142 valValid.isValid = false; 143 } else if (rule.regex && !rule.regex.test(value)) { 144 valValid.message = errorMessage.invalid; 145 valValid.isValid = false; 146 } else if (typeof rule.validate == "function" && !rule.validate(value)) { 147 let { validate, required } = rule.errorMessage; 148 valValid.message = validate || required; 149 valValid.isValid = false; 150 } 151 valValid.values[rule.key] = value; 152 if (!valValid.isValid) { 153 break; 154 } 155 } 156 157 return valValid; 158} 159 160// è¾ å©å½æ°ï¼æ£æ¥åç¬¦ä¸²ä¸æ¯å¦å 嫿 æåè¯ 161function containsInvalidWords( 162 str, 163 invalidWords 164) { 165 return invalidWords.some((word) => str.toLowerCase().includes(word)); 166} 167 168// è¾ å©å½æ°ï¼æ ¡éªçµè¯å·ç 169function isValidPhone(phone) { 170 const phoneRegex = /^[0-9+\-\(\))]{1,50}$/; 171 return phoneRegex.test(phone); 172} 173 174// è¾ å©å½æ°ï¼æ ¡éªçµåé®ä»¶å°å 175function isValidEmail(email) { 176 const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; 177 return emailRegex.test(email); 178}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.