rules.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. /**
  2. * 验证非负整数(包含0及正整数)
  3. * @param {*} rule
  4. * @param {*} value
  5. * @param {*} callback
  6. */
  7. export function checkNonnegativeInteger(rule, value, callback) {
  8. if (value) {
  9. value += ''
  10. if(/(^(0|[1-9][0-9]*)$)/.test(value)) {
  11. callback()
  12. } else {
  13. callback(new Error('只能输入数字,数值不能为负,且不能为小数'))
  14. }
  15. } else {
  16. callback()
  17. }
  18. }
  19. /**
  20. * 验证正整数(不包含0的正整数)
  21. * @param {*} rule
  22. * @param {*} value
  23. * @param {*} callback
  24. */
  25. export function checkPositiveInteger(rule, value, callback) {
  26. if (value) {
  27. value += ''
  28. if(/(^[1-9]\d*$)/.test(value)) {
  29. callback()
  30. } else {
  31. callback(new Error('只能输入数字,数值不能为负数或0,且不能为小数'))
  32. }
  33. } else {
  34. callback()
  35. }
  36. }
  37. /**
  38. * 验证正数,且小数可2位(包含0及正整数)
  39. * @param {*} rule
  40. * @param {*} value
  41. * @param {*} callback
  42. */
  43. export function checkPositiveDecimal(rule, value, callback) {
  44. if (value) {
  45. value += ''
  46. // if(/(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(value)) {
  47. // if(/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(value)) {
  48. if(/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]{1,2}$)/.test(value)) {
  49. callback()
  50. } else {
  51. callback(new Error('只能输入数字,且数值不能为负,小数限2位'))
  52. }
  53. } else {
  54. callback()
  55. }
  56. }
  57. /**
  58. * 验证正数,且小数可4位(包含0及正整数)
  59. * @param {*} rule
  60. * @param {*} value
  61. * @param {*} callback
  62. */
  63. export function checkPositiveDecimal4(rule, value, callback) {
  64. if (value) {
  65. value += ''
  66. // if(/(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9]){0,3}$)/.test(value)) {
  67. if(/(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]{1,4}$)/.test(value)) {
  68. callback()
  69. } else {
  70. callback(new Error('只能输入数字,且数值不能为负,小数限4位'))
  71. }
  72. } else {
  73. callback()
  74. }
  75. }
  76. /**
  77. * 验证手机号,座机号
  78. * @param {*} rule
  79. * @param {*} value
  80. * @param {*} callback
  81. */
  82. export function validPhoneMobile(rule, value, callback){
  83. if (value){
  84. if (value === '') {
  85. callback(new Error('请输入11位手机号'));
  86. } else {
  87. let regPone = null;
  88. let mobile = /^1(3|4|5|6|7|8|9)\d{9}$/; //最新16手机正则
  89. let tel = /^(0\d{2,3}-){0,1}\d{7,8}$/; //座机
  90. if (value.charAt(0) == 0) { // charAt查找第一个字符方法,用来判断输入的是座机还是手机号
  91. regPone = tel;
  92. } else {
  93. regPone = mobile;
  94. }
  95. if (!regPone.test(value)) {
  96. callback(new Error("请填写11位手机号或座机号(座机格式为 区号-座机号码)"))
  97. }
  98. callback();
  99. }
  100. }else {
  101. callback();
  102. }
  103. }
  104. /**
  105. * 验证经度输入范围在-180-180之间,且小数可15位
  106. * @param {*} rule
  107. * @param {*} value
  108. * @param {*} callback
  109. */
  110. export function checkLon(rule, value, callback) {
  111. if (value) {
  112. value += ''
  113. if (value.match(/^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,15})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/)) {
  114. callback()
  115. } else {
  116. callback(new Error('经度为-180~180,小数限15位'))
  117. }
  118. } else {
  119. callback()
  120. }
  121. }
  122. /**
  123. * 验证纬度输入范围在-90~90之间,且小数可15位
  124. * @param {*} rule
  125. * @param {*} value
  126. * @param {*} callback
  127. */
  128. export function checkLat(rule, value, callback) {
  129. if (value) {
  130. value += ''
  131. if (value.match(/^(\-|\+)?([0-8]?\d{1}\.\d{0,15}|90\.0{0,6}|[0-8]?\d{1}|90)$/)) {
  132. callback()
  133. } else {
  134. callback(new Error('纬度为-90~90,小数限15位'))
  135. }
  136. } else {
  137. callback()
  138. }
  139. }
  140. /**
  141. * 温度校验
  142. * @param rule
  143. * @param value
  144. * @param callback
  145. */
  146. export function checkTemperature(rule, value, callback) {
  147. if (value !== '') {
  148. // 判断温度是否为数字
  149. if (!/^-?\d+(\.\d+)?$/.test(value)) {
  150. callback(new Error('温度值必须为数字'))
  151. } else {
  152. // 将温度转换为数字类型,方便后续比较大小
  153. const num = Number(value)
  154. // 判断温度的范围是否在 -50 到 50 之间
  155. if (num < -50 || num > 50) {
  156. callback(new Error('温度范围必须在-50℃ ~ 50℃之间'))
  157. } else {
  158. // 判断小数部分是否超过一位
  159. const reg = /(?:\.)(\d+)/
  160. let match = value.match(reg)
  161. if (match && match[1].length > 1) {
  162. callback(new Error('小数部分只能保留一位'))
  163. }
  164. // 判断整数部分是否超过两位,且第一位是否为0
  165. match = value.match(/^-?(\d+)/)
  166. if (match && (match[1].length > 2 || (match[1].length === 2 && match[1][0] === '0'))) {
  167. callback(new Error('整数部分长度不能超过2位,且第一位不能是0'))
  168. } else {
  169. callback()
  170. }
  171. }
  172. }
  173. } else {
  174. callback(new Error('温度值不能为空'))
  175. }
  176. }
  177. /**
  178. * 车牌号校验(含新能源)
  179. * @param rule
  180. * @param value
  181. * @param callback
  182. */
  183. export function carPhoneValid (rule, value, callback) {
  184. const plateNumber = /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}([A-HJ-NP-Z0-9挂学警港澳]{1}|[应急]{2}))$/
  185. if (plateNumber.test(value)) {
  186. callback()
  187. } else {
  188. callback(new Error('请输入正确的车牌号'))
  189. }
  190. }
  191. /**
  192. * 英文和数字校验
  193. * @param rule
  194. * @param value
  195. * @param callback
  196. */
  197. export function englishAndNumValid(rule, value, callback) {
  198. if (value) {
  199. value += ''
  200. if (value.match(/^[A-Za-z0-9]{4,40}$/)) {
  201. callback()
  202. } else {
  203. callback(new Error('只能输入英文和数字'))
  204. }
  205. } else {
  206. callback()
  207. }
  208. }
  209. /**
  210. * 英文和数字校验18位
  211. * @param rule
  212. * @param value
  213. * @param callback
  214. */
  215. export function englishAndshibaNumValid(rule, value, callback) {
  216. if (value) {
  217. value += ''
  218. if (value.match(/^[A-Za-z0-9]{0,18}$/)) {
  219. callback()
  220. } else {
  221. callback(new Error('只能输入0~18位英文和数字'))
  222. }
  223. } else {
  224. callback()
  225. }
  226. }
  227. export function englishOnly(rule, value, callback) {
  228. if (value) {
  229. value += ''
  230. if (value.match(/^[a-zA-Z]{2,40}$/)) {
  231. callback()
  232. } else {
  233. callback(new Error('请输入英文,且至少两个字符'))
  234. }
  235. } else {
  236. callback()
  237. }
  238. }