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

如何修改PHP正则表达式以禁止字符串中出现连续点序列?

修改正则表达式以禁止连续点序列

嘿,要解决这个问题其实很简单,我们只需要在你原有的正则基础上,添加一个负向前瞻断言来排除包含连续点的情况就行。

方案一:直接用负向前瞻禁止连续点

这个方案最直观,既保留了你原来允许的所有合法字符,又能直接过滤掉任何包含..(连续两个点)的字符串。

修改后的验证代码如下:

if (!empty($value) && !preg_match("/^(?!.*\.\.)[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s\'\.\-]+$/", $value)) {
    echo "KO";
} else {
    echo "OK";
}

正则解释:

  • (?!.*\.\.):这是核心的负向前瞻断言,意思是整个字符串中不存在任何位置后面跟着两个连续的点。不管连续点在开头、中间还是结尾,都会被直接排除。
  • 后面的[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s\'\.\-]+就是你原来的规则,允许字母、重音字符、空格、单引号、单个点和连字符。

测试案例

  • ✅ 合法输入(输出OK):"test.example"、"test'example-test"、"Hello-Wörld."
  • ❌ 非法输入(输出KO):"tes....t"、"...example"、"test..example"

进阶:禁止开头/结尾出现单个点(可选)

如果你还想进一步限制,不允许字符串以点开头或结尾,可以用下面的正则:

if (!empty($value) && !preg_match("/^(?!.*\.\.)[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s\'\-]+(?:\.[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s\'\-]+)*$/", $value)) {
    echo "KO";
} else {
    echo "OK";
}

这个正则会确保点只能出现在字符串中间,且前后都有合法的非点字符,同时依然禁止连续点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:27:46