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

求允许字母数字与单个连字符的正则表达式,屏蔽指定特殊字符

正则校验方案实现

需求回顾

  • 允许输入:大小写字母、数字、单个连字符-(禁止连续两个-)
  • 禁止输入:~!#$%^&*()+/"':;{}[]|<>=–(注:–即连续两个-`)

正确正则方案

1. 整体内容合法性校验(用于表单提交验证)

这个正则确保整个输入内容完全符合规则,不包含非法字符,且连字符不会连续出现、不会在结尾:

^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$

解释:

  • ^ 和 $ 锁定字符串首尾,确保整个内容都被校验
  • [a-zA-Z0-9]+ 匹配至少一个字母或数字(避免输入为空或仅含连字符)
  • (?:-[a-zA-Z0-9]+)* 允许零个或多个「连字符+至少一个字母/数字」的组合,彻底杜绝连字符连续出现或单独存在的情况

如果业务允许输入首尾出现单个连字符,可调整为:

^-?[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*-?$

2. 实时输入过滤(用于阻止非法字符输入)

如果需要在用户输入时实时过滤非法内容,使用以下正则匹配所有非法字符并替换为空:

[^a-zA-Z0-9-]|--

解释:

  • [^a-zA-Z0-9-] 匹配所有非字母、非数字、非单个连字符的非法字符
  • |-- 匹配连续两个连字符(对应需求中的–)
  • 全局匹配并替换为空即可实现实时过滤

原正则问题分析

你之前尝试的 ^[a-z ]+([-])[a-z ] 存在以下问题:

  • 仅允许小写字母和空格,未包含数字、大写字母
  • 强制要求输入必须包含且仅包含一个连字符,且位置固定在两组字符中间
  • 未处理需求中禁止的特殊字符,也没有限制连续连字符的情况

代码示例(JavaScript)

表单校验示例

const isValidInput = (value) => {
  const regex = /^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$/;
  return regex.test(value);
};

// 调用示例
console.log(isValidInput("abc123")); // true
console.log(isValidInput("abc-123")); // true
console.log(isValidInput("abc--123")); // false
console.log(isValidInput("abc!123")); // false

实时过滤示例

const input = document.getElementById("target-input");
input.addEventListener("input", (e) => {
  // 过滤非法字符和连续连字符
  e.target.value = e.target.value.replace(/[^a-zA-Z0-9-]|--/g, "");
});

内容的提问来源于stack exchange,提问作者apoorv sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:50:23