You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:52:23