首页 > 解决方案 > PHP允许字母和减号但不能重复减号

问题描述

我想在任何字符集(拉丁文、希伯来文、西里尔文但不是 unicode 表情符号)中允许所有字母和减号(-),但它不应该允许每次使用减号超过一次,而不是在开始和结束时使用:

YaMo -> OK
Ya-Mo -> OK
Ya-Mo-Ga -> OK
Ya--Mo -> FALSE
Ya---Mo -> FALSE
-Ya -> FALSE
-Ya-Mo- -> FALSE
Ya- -> FALSE
Yo-Mo- Mo -> FALSE
Yo-Mo -Go -> FALSE

到目前为止,我有:

preg_match('/^[\p{L} -]+$/', $post['firstname'])

它不关心多次出现以及是否在开始或结束。是否存在任何正则表达式方法来做到这一点?

作为解决方法,我现在检查 substr 第一个和最后一个字母!= '-' 并使用 strpos 检查'--'。

提议的类似副本是错误的,因为它不能正常工作,它允许:Yo-Mo-Mo

标签: phpregex

解决方案


尝试这个:

^\w+(-\w+)*$
  • \w+ 匹配任何单词字符(等于 [a-zA-Z0-9_])一次或多次
  • (-\w+)* 确保单词 characters 和 hiphen 出现零次或多次

在线演示


推荐阅读