首页 > 解决方案 > 字符串中没有点序列

问题描述

我使用以下条件验证字符串参数

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

我希望这个 REGEX 不接受这样的字符串:"tes....t" , "...example"

=> 也就是说不接受点序列

那我能做什么?

标签: regex

解决方案


您可以从字符类中取出点,并可选择在点之前重复它。

^[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s'-]+(?:\.[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s'-]+)*$

正则表达式演示

另一种选择是使用负前瞻来排除 2 个连续的点。

^(?!.*\.\.)[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s'.-]+$

该模式确实包含\s可能也匹配换行符的内容。如果要匹配水平空白字符,可以将其更改为\h

我建议使用 else 子句来测试它,以防止总是回显"OK"

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

输出

KO

推荐阅读