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

PHP正则表达式需求:仅允许一个空格且不能在字符串首尾

正则表达式修改方案

你的问题出在错误地将数量限定符{0,1}放到了字符集[]内部,这会导致正则把{、0、,、1都当作允许的字符,而不是限制空格的出现次数。以下是两种正确的修改方案:

方案一:分情况匹配(无空格或仅一个空格)

^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?!\s)(?!.*\s$)(?:[a-zA-Z']+|[a-zA-Z']+\s[a-zA-Z']+)$

说明:

  • 保留原有的大小写字母强制要求:(?=[^a-z]*[a-z])和(?=[^A-Z]*[A-Z])
  • (?!\s)确保开头不是空格,(?!.*\s$)确保结尾不是空格
  • 非捕获组(?:[a-zA-Z']+|[a-zA-Z']+\s[a-zA-Z']+)匹配两种合法情况:
    1. 纯字母/撇号组成的字符串(无空格)
    2. 字母/撇号 + 单个空格 + 字母/撇号(仅含一个空格,且不在首尾)

方案二:用预查限制空格数量

^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?!\s)(?!.*\s$)(?=(?:[^\s]*\s){0,1}[^\s]*$)[a-zA-Z'\s]{2,40}$

说明:

  • 新增的预查(?=(?:[^\s]*\s){0,1}[^\s]*$)用于限制整个字符串中最多出现1个空格
  • 字符集[a-zA-Z'\s]允许字母、撇号和空格,但通过预查控制空格数量,同时首尾预查确保空格不会出现在开头或结尾
  • 保留原有的长度限制{2,40}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:07:11