PageSourceSearch

https://www.stanfordmagnets.com/js/utils.js?v=1789441526

js stanfordmagnets.com collected 2026-10-02 05:21:06 UTC 5,244 bytes, 178 lines download raw bytes

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.