当前位置:   article > 正文

Vue系列之—Element UI 表单自定义效验规则_elementui自定义表单验证规则

elementui自定义表单验证规则

目录

 一、表单效验规则的使用

1、自定义效验规则介绍

2、绑定效验方法

3、添加效验

4、效验判断

5、清除效验规则

二、常见表单效验规则

(一)pattern验证

(二)validator.js文件中常见的验证方法


 一、表单效验规则的使用

1、自定义效验规则介绍

  • 是否必填: required: true  ||   fasle
  • 效验消息提示:message: "提示信息"
  • 效验触发方式:trigger:"change"  ||  "blur"
  • 根据正则表达式验证: pattern
  • 最大长度和最小长度: max = 10 和 min = 1
  • 数据转换:transform(value){return}
  • 自定义校验功能:validador: fn(rule, value, callback)

2、绑定效验方法

  1. 在<el-form>中添加属性   :rule="rules";
  2. 在<el-form-item>中添加prop属性,将属性值对应写在rules规则中。
  1. <el-form :model="ruleForm" :rules="rules">
  2. <el-form-item label="姓名:" prop="name">
  3. <el-input
  4. v-model.trim="personList.name"
  5. placeholder="请输入"
  6. />
  7. </el-form-item>
  8. </el-form>

3、添加效验

  • 方法一:直接在index.vue页面中用 pattern 进行正则表达式验证
  1. name: [
  2. { pattern: pattern验证, required: true, message: "提示信息", trigger: "blur" }
  3. ]

案例:

  1. data() {
  2.  
  3. return {
  4. rules: {
  5. name: [
  6. { required: false, message: "请输入姓名", trigger: "blur" },
  7. { min: 1, max: 10, message: "长度不超过10个字符", trigger: "blur" }
  8. ],
  9.  
  10.  number: [
  11.           { required: true, message: "数字", trigger: "blur" },
  12.           { pattern: /^[0-9]+.?[0-9]{1,2}?$/ , message: '金额为数字', trigger: "blur"},
  13.         ]
  14. }
  15. }
  16. }
  1. //表单限制 input 输入框只能输入纯数字
  2. oninput = "value=value.replace(/[^\d]/g,'')"
  3. //案例
  4. <el-form-item label="员工号:">
  5. <el-input
  6. v-model.trim="PersonnelData.staffId"
  7. oninput="value=value.replace(/[^\d]/g,'')"
  8. clearable
  9. placeholder="请输入员工号"
  10. />
  11. </el-form-item>
  • 方法二 :直接在index.vue页面中的data里面定义验证方法
  • 使用语法:{validator:验证方法,trigger:验证触发}
  1. data() {
  2.     const validatePass = (rule, value, callback) => {
  3.       if (value.length < 3) {
  4.         callback(new Error("密码不能小于3位"));
  5.       } else {
  6.         callback();
  7.       }
  8.     };
  9. return {
  10. rules: {
  11.   password: [
  12.           { required: true, trigger: "blur", validator: validatePass },
  13.         ]
  14. }
  15. }
  16. }
  • 方法三:新开一个文件夹(validate.js)定义所有需要用到的验证规则

  • 然后在页面(index.vue)中引入验证规则定义的文件,并在export default中定义rule规则

  • 使用语法:{validator:验证方法,trigger:验证触发}

4、效验判断

  • 验证设置效验处是否已完成填写,若无,则效验处有提示
  1. handle() {
  2. this.$refs["admin"].validate((valid) => {
  3. if(valid){
  4. .......
  5. }
  6. })
  7. }

5、清除效验规则

  1. Close() {
  2. this.$refs["dateForm"].clearValidate();
  3. this.dateForm = {}
  4. }

二、常见表单效验规则

(一)pattern验证

  1. 1、是否合法IP地址:
  2. pattern:/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/,
  3. 2.是否手机号码或者固话
  4. pattern:/^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/,
  5. 3. 是否身份证号码
  6. pattern:/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
  7. 4.是否邮箱
  8. pattern:/^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/,
  9. 5.整数填写
  10. pattern:/^-?[1-9]\d*$/,
  11. 6.正整数填写
  12. pattern:/^[1-9]\d*$/,
  13. 7.小写字母
  14. pattern:/^[a-z]+$/,
  15. 8.大写字母
  16. pattern:/^[A-Z]+$/,
  17. 9.大小写混合
  18. pattern:/^[A-Za-z]+$/,
  19. 10.多个8位数字格式(yyyyMMdd)并以逗号隔开
  20. pattern:/^\d{8}(\,\d{8})*$/,
  21. 11.数字加英文,不包含特殊字符
  22. pattern:/^[a-zA-Z0-9]+$/,
  23. 12.前两位是数字后一位是英文
  24. pattern:/^\d{2}[a-zA-Z]+$/,
  25. 13.密码校验(6-20位英文字母、数字或者符号(除空格),且字母、数字和标点符号至少包含两种)
  26. pattern:/^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/,
  27. 14.中文校验
  28. pattern:/^[\u0391-\uFFE5A-Za-z]+$/,

(二)validator.js文件中常见的验证方法

  1. 1、是否合法IP地址
  2. export function validateIP(rule, value,callback) {
  3. if(value==''||value==undefined||value==null){
  4. callback();
  5. }else {
  6. const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
  7. if ((!reg.test(value)) && value != '') {
  8. callback(new Error('请输入正确的IP地址'));
  9. } else {
  10. callback();
  11. }
  12. }
  13. }
  14. 2、是否手机号码或者固话
  15. export function validatePhoneTwo(rule, value, callback) {
  16. const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/;;
  17. if (value == '' || value == undefined || value == null) {
  18. callback();
  19. } else {
  20. if ((!reg.test(value)) && value != '') {
  21. callback(new Error('请输入正确的电话号码或者固话号码'));
  22. } else {
  23. callback();
  24. }
  25. }
  26. }
  27. 3、是否固话
  28. export function validateTelphone(rule, value,callback) {
  29. const reg =/0\d{2,3}-\d{7,8}/;
  30. if(value==''||value==undefined||value==null){
  31. callback();
  32. }else {
  33. if ((!reg.test(value)) && value != '') {
  34. callback(new Error('请输入正确的固定电话)'));
  35. } else {
  36. callback();
  37. }
  38. }
  39. }
  40. 4、是否手机号码
  41. export function validatePhone(rule, value,callback) {
  42. const reg =/^[1][3-9][0-9]{9}$/;
  43. if(value==''||value==undefined||value==null){
  44. callback();
  45. }else {
  46. if ((!reg.test(value)) && value != '') {
  47. callback(new Error('请输入正确的电话号码'));
  48. } else {
  49. callback();
  50. }
  51. }
  52. }
  53. 5、是否身份证号码
  54. export function validateIdNo(rule, value,callback) {
  55. const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  56. if(value==''||value==undefined||value==null){
  57. callback();
  58. }else {
  59. if ((!reg.test(value)) && value != '') {
  60. callback(new Error('请输入正确的身份证号码'));
  61. } else {
  62. callback();
  63. }
  64. }
  65. }
  66. 6、是否邮箱
  67. export function validateEMail(rule, value,callback) {
  68. const reg =/^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/;
  69. if(value==''||value==undefined||value==null){
  70. callback();
  71. }else{
  72. if (!reg.test(value)){
  73. callback(new Error('请输入正确的邮箱'));
  74. } else {
  75. callback();
  76. }
  77. }
  78. }
  79. 7、合法url
  80. export function validateURL(url) {
  81. const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
  82. return urlregex.test(url);
  83. }
  84. 8、验证内容是否包含英文数字以及下划线
  85. export function isPassword(rule, value, callback) {
  86. const reg =/^[_a-zA-Z0-9]+$/;
  87. if(value==''||value==undefined||value==null){
  88. callback();
  89. } else {
  90. if (!reg.test(value)){
  91. callback(new Error('仅由英文字母,数字以及下划线组成'));
  92. } else {
  93. callback();
  94. }
  95. }
  96. }
  97. 9、自动检验数值的范围
  98. export function checkMax20000(rule, value, callback) {
  99. if (value == '' || value == undefined || value == null) {
  100. callback();
  101. } else if (!Number(value)) {
  102. callback(new Error('请输入[1,20000]之间的数字'));
  103. } else if (value < 1 || value > 20000) {
  104. callback(new Error('请输入[1,20000]之间的数字'));
  105. } else {
  106. callback();
  107. }
  108. }
  109. 10、验证数字输入框最大数值
  110. export function checkMaxVal(rule, value,callback) {
  111. if (value < 0 || value > 最大值) {
  112. callback(new Error('请输入[0,最大值]之间的数字'));
  113. } else {
  114. callback();
  115. }
  116. }
  117. 11、验证是否1-99之间
  118. export function isOneToNinetyNine(rule, value, callback) {
  119. if (!value) {
  120. return callback(new Error('输入不可以为空'));
  121. }
  122. setTimeout(() => {
  123. if (!Number(value)) {
  124. callback(new Error('请输入正整数'));
  125. } else {
  126. const re = /^[1-9][0-9]{0,1}$/;
  127. const rsCheck = re.test(value);
  128. if (!rsCheck) {
  129. callback(new Error('请输入正整数,值为【1,99】'));
  130. } else {
  131. callback();
  132. }
  133. }
  134. }, 0);
  135. }
  136. 12、验证是否整数
  137. export function isInteger(rule, value, callback) {
  138. if (!value) {
  139. return callback(new Error('输入不可以为空'));
  140. }
  141. setTimeout(() => {
  142. if (!Number(value)) {
  143. callback(new Error('请输入正整数'));
  144. } else {
  145. const re = /^[0-9]*[1-9][0-9]*$/;
  146. const rsCheck = re.test(value);
  147. if (!rsCheck) {
  148. callback(new Error('请输入正整数'));
  149. } else {
  150. callback();
  151. }
  152. }
  153. }, 0);
  154. }
  155. 13、验证是否整数,非必填
  156. export function isIntegerNotMust(rule, value, callback) {
  157. if (!value) {
  158. callback();
  159. }
  160. setTimeout(() => {
  161. if (!Number(value)) {
  162. callback(new Error('请输入正整数'));
  163. } else {
  164. const re = /^[0-9]*[1-9][0-9]*$/;
  165. const rsCheck = re.test(value);
  166. if (!rsCheck) {
  167. callback(new Error('请输入正整数'));
  168. } else {
  169. callback();
  170. }
  171. }
  172. }, 1000);
  173. }
  174. 14、 验证是否是[0-1]的小数
  175. export function isDecimal(rule, value, callback) {
  176. if (!value) {
  177. return callback(new Error('输入不可以为空'));
  178. }
  179. setTimeout(() => {
  180. if (!Number(value)) {
  181. callback(new Error('请输入[0,1]之间的数字'));
  182. } else {
  183. if (value < 0 || value > 1) {
  184. callback(new Error('请输入[0,1]之间的数字'));
  185. } else {
  186. callback();
  187. }
  188. }
  189. }, 100);
  190. }
  191. 15、 验证是否是[1-10]的小数,即不可以等于0
  192. export function isBtnOneToTen(rule, value, callback) {
  193. if (typeof value == 'undefined') {
  194. return callback(new Error('输入不可以为空'));
  195. }
  196. setTimeout(() => {
  197. if (!Number(value)) {
  198. callback(new Error('请输入正整数,值为[1,10]'));
  199. } else {
  200. if (!(value == '1' || value == '2' || value == '3' || value == '4' || value == '5' || value == '6' || value == '7' || value == '8' || value == '9' || value == '10')) {
  201. callback(new Error('请输入正整数,值为[1,10]'));
  202. } else {
  203. callback();
  204. }
  205. }
  206. }, 100);
  207. }
  208. 16、验证是否是[1-100]的小数,即不可以等于0
  209. export function isBtnOneToHundred(rule, value, callback) {
  210. if (!value) {
  211. return callback(new Error('输入不可以为空'));
  212. }
  213. setTimeout(() => {
  214. if (!Number(value)) {
  215. callback(new Error('请输入整数,值为[1,100]'));
  216. } else {
  217. if (value < 1 || value > 100) {
  218. callback(new Error('请输入整数,值为[1,100]'));
  219. } else {
  220. callback();
  221. }
  222. }
  223. }, 100);
  224. }
  225. 17、验证是否是[0-100]的小数
  226. export function isBtnZeroToHundred(rule, value, callback) {
  227. if (!value) {
  228. return callback(new Error('输入不可以为空'));
  229. }
  230. setTimeout(() => {
  231. if (!Number(value)) {
  232. callback(new Error('请输入[1,100]之间的数字'));
  233. } else {
  234. if (value < 0 || value > 100) {
  235. callback(new Error('请输入[1,100]之间的数字'));
  236. } else {
  237. callback();
  238. }
  239. }
  240. }, 100);
  241. }
  242. 18、验证端口是否在[0,65535]之间
  243. export function isPort(rule, value, callback) {
  244. if (!value) {
  245. return callback(new Error('输入不可以为空'));
  246. }
  247. setTimeout(() => {
  248. if (value == '' || typeof(value) == undefined) {
  249. callback(new Error('请输入端口值'));
  250. } else {
  251. const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
  252. const rsCheck = re.test(value);
  253. if (!rsCheck) {
  254. callback(new Error('请输入在[0-65535]之间的端口值'));
  255. } else {
  256. callback();
  257. }
  258. }
  259. }, 100);
  260. }
  261. 19、验证端口是否在[0,65535]之间,非必填,isMust表示是否必填
  262. export function isCheckPort(rule, value, callback) {
  263. if (!value) {
  264. callback();
  265. }
  266. setTimeout(() => {
  267. if (value == '' || typeof(value) == undefined) {
  268. //callback(new Error('请输入端口值'));
  269. } else {
  270. const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
  271. const rsCheck = re.test(value);
  272. if (!rsCheck) {
  273. callback(new Error('请输入在[0-65535]之间的端口值'));
  274. } else {
  275. callback();
  276. }
  277. }
  278. }, 100);
  279. }
  280. 20、小写字母
  281. export function validateLowerCase(val) {
  282. const reg = /^[a-z]+$/;
  283. return reg.test(val);
  284. }
  285. 21、两位小数验证
  286. const validateValidity = (rule, value, callback) => {
  287. if (!/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(value)) {
  288. callback(new Error('最多两位小数!!!'));
  289. } else {
  290. callback();
  291. }
  292. };
  293. 22、是否大写字母
  294. export function validateUpperCase(val) {
  295. const reg = /^[A-Z]+$/;
  296. return reg.test(val);
  297. }
  298. 23、是否大小写字母
  299. export function validatAlphabets(val) {
  300. const reg = /^[A-Za-z]+$/;
  301. return reg.test(val);
  302. }
  303. 24、密码校验
  304. export const validatePsdReg = (rule, value, callback) => {
  305. if (!value) {
  306. return callback(new Error('请输入密码'))
  307. }
  308. if (!/^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/.test(value)) {
  309. callback(new Error('请输入6-20位英文字母、数字或者符号(除空格),且字母、数字和标点符号至少包含两种'))
  310. } else {
  311. callback()
  312. }
  313. }
  314. 25、中文校验
  315. export const validateContacts = (rule, value, callback) => {
  316. if (!value) {
  317. return callback(new Error('请输入中文'))
  318. }
  319. if (!/^[\u0391-\uFFE5A-Za-z]+$/.test(value)) {
  320. callback(new Error('不可输入特殊字符'))
  321. } else {
  322. callback()
  323. }
  324. }
  325. 26、身份证校验
  326. export const ID = (rule, value, callback) => {
  327. if (!value) {
  328. return callback(new Error('身份证不能为空'))
  329. }
  330. if (! /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)) {
  331. callback(new Error('请输入正确的二代身份证号码'))
  332. } else {
  333. callback()
  334. }
  335. }
  336. 27、账号校验
  337. export const validateCode = (rule, value, callback) => {
  338. if (!value) {
  339. return callback(new Error('请输入账号'))
  340. }
  341. if (!/^(?![0-9]*$)(?![a-zA-Z]*$)[a-zA-Z0-9]{6,20}$/.test(value)) {
  342. callback(new Error('账号必须为6-20位字母和数字组合'))
  343. } else {
  344. callback()
  345. }
  346. }
  347. 28、纯数字校验
  348. export const validateNumber = (rule, value, callback) => {
  349. let numberReg = /^\d+$|^\d+[.]?\d+$/
  350. if (value !== '') {
  351. if (!numberReg.test(value)) {
  352. callback(new Error('请输入数字'))
  353. } else {
  354. callback()
  355. }
  356. } else {
  357. callback(new Error('请输入值'))
  358. }
  359. }
  360. 29、最多一位小数
  361. const onePoint = (rule, value, callback) => {
  362. if (!/^[0-9]+([.]{1}[0-9]{1})?$/.test(value)) {
  363. callback(new Error('最多一位小数!!!'));
  364. } else {
  365. callback();
  366. }
  367. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/607313
推荐阅读