regex - 字符串中没有点序列
问题描述
我使用以下条件验证字符串参数
if (!empty($value) && !preg_match("/^[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s\'\.\-]+$/", $value, $matches)) {
echo "KO";
}
echo "OK";
我希望这个 REGEX 不接受这样的字符串:"tes....t" , "...example"
=> 也就是说不接受点序列
那我能做什么?
解决方案
您可以从字符类中取出点,并可选择在点之前重复它。
^[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
推荐阅读
- python - 导入不起作用,Pip 无法安装任何东西
- scala - 如何从递归生成值的流中创建 akka-stream 源?
- ios - 无法更新现有应用商店应用
- kotlin - 如何在 kotlin jvm 控制台应用程序中异步使用燃料
- lldb - 在 lldb 命令中注入变量值
- sql - 当字段的总和等于一个值时获取最大日期
- sql - 输入年份和月份,如 ('2018,2020','1,2,4,5') 并返回带有每个月份名称的年份
- python - 我想使用 itertools 的组合方法以列表列表的形式获取列表的所有组合
- angular - http.post 给出 TypeError: "cyclic object value"
- javascript - js在点击时工作或不工作