Laravel 5.5:如何实现区分大小写的数组验证规则?
区分大小写的数组重复值验证方案
我明白你遇到的问题——默认的distinct规则通常会忽略大小写来判断重复,但你需要严格区分Small和small这类仅大小写不同的值,一旦出现就提示「不允许重复值」。下面给你几个实用的解决方案:
一、原生JavaScript手动实现验证
如果是自己编写验证逻辑,这两种方法简单直接:
方法1:利用Set的严格比较特性
Set在存储字符串时是严格区分大小写的,所以我们可以对比原数组和Set转换后的长度来判断是否有重复:
function hasCaseSensitiveDuplicates(arr) { // 若Set的长度小于原数组,说明存在区分大小写的重复项 return new Set(arr).size !== arr.length; } // 测试示例 const testArray1 = ['Small', 'small', 'Large']; console.log(hasCaseSensitiveDuplicates(testArray1)); // 输出 true(存在重复) const testArray2 = ['Small', 'Medium', 'Large']; console.log(hasCaseSensitiveDuplicates(testArray2)); // 输出 false(无重复)
调用这个函数后,如果返回true,就触发「不允许重复值」的提示即可。
方法2:遍历数组记录元素出现情况
如果需要更直观的控制(比如提前终止遍历),可以用对象来记录每个元素的出现:
function hasCaseSensitiveDuplicates(arr) { const seenItems = {}; for (const item of arr) { if (seenItems[item]) { // 找到重复项,直接返回true return true; } seenItems[item] = true; } // 遍历完无重复 return false; }
二、表单验证库中的自定义规则(以VeeValidate为例)
如果你是用表单验证库(比如VeeValidate),默认的distinct规则不满足需求,可以自定义一个严格区分大小写的验证规则:
import { defineRule } from 'vee-validate'; // 自定义区分大小写的去重规则 defineRule('distinct-case-sensitive', (value) => { if (!Array.isArray(value)) { // 非数组类型直接通过验证 return true; } // 验证不通过时返回提示文本 return new Set(value).size === value.length || '不允许重复值'; });
之后在表单字段中使用这个自定义规则就可以了。
三、通用思路总结
不管你用什么工具或框架,核心逻辑都是不做大小写转换,直接用严格相等(===)来判断元素是否重复——因为字符串的严格相等比较是区分大小写的,只要确保验证逻辑不统一转换元素的大小写,就能实现你要的效果。
内容的提问来源于stack exchange,提问作者vikas hemanth
相关产品推荐
相关产品推荐

