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

密码输入框正则需求:允许中间空格及特殊字符,禁止首尾空格

解决密码首尾无空格、允许中间空格及特殊字符的正则方案

我懂你要的需求了——密码里随便用特殊字符、中间插空格都没问题,但首尾绝对不能有空格对吧?之前试的\S太严格,又搞不定首尾空格的取反,给你个靠谱的正则方案:

核心正则表达式

const passwordValidator = /^(?!\s).*(?<!\s)$/;

拆解每个部分的作用

  • ^:锚定字符串的起始位置
  • (?!\s):正向预查,确保第一个字符不是空格(也就是开头不能以空格开头)
  • .*:匹配任意数量的任意字符(包括中间的空格、各种特殊符号,比如!@#$%^&*()这些都没问题)
  • (?<!\s):反向预查,确保最后一个字符不是空格(也就是结尾不能以空格收尾)
  • $:锚定字符串的结束位置

测试用例验证

直接在JS里测试几个典型场景,看看效果:

// 符合要求的情况
console.log(passwordValidator.test("MyPass123!@#")); // true(常规密码)
console.log(passwordValidator.test("My Pass 123!@#")); // true(中间含空格)
console.log(passwordValidator.test("a")); // true(单个非空格字符)

// 不符合要求的情况
console.log(passwordValidator.test(" MyPass123!@#")); // false(开头空格)
console.log(passwordValidator.test("MyPass123!@# ")); // false(结尾空格)
console.log(passwordValidator.test(" ")); // false(纯空格)
console.log(passwordValidator.test("  ")); // false(全是空格)

补充:如果需要限制密码长度

比如要求密码至少6位、最多20位,可以修改正则为:

const passwordValidatorWithLength = /^(?!\s).{5,19}(?<!\s)$/;

这里.{5,19}表示匹配5到19个任意字符,加上首尾的非空格要求,整体长度就是6到20位。

为啥你之前的尝试没成功?

  • 用\S的话,^\S+$会强制所有字符都是非空格,直接把中间的空格也禁止了,不符合需求;
  • 你试的\A\s|\s*\Z在JS里不适用(JS正则没有\A/\Z,用^/$代替),而且直接匹配空格再取反的思路不对,应该用预查来排除首尾出现空格的情况,而不是反过来匹配空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:03:20