php - 正则表达式匹配字母数字,中间可能只有破折号

标签 php regex

我已经做到了这一点:

^[a-zA-Z0-9]+(?:--?[a-zA-Z0-9]+)*$

但是上面的表达式并没有像我需要的那样限制长度。我需要的模式总共只能匹配 5-6 个字符。所以,这就是它应该如何解决的问题:

safety        (valid)
safet-        (invalid)
s-a-fe        (valid)
-safet        (invalid)
s7-45         (valid)
s--fs         (invalid)

连续连字符无效。前导和尾随连字符无效。总长度(包括任何连字符)应为 5-6 个字符。我尝试用范围 ({5,6}) 替换我的 +,但没有成功。感谢您的帮助。


我尝试的另一条路线是:

^[A-Z0-9][A-Z0-9-]{3,4}[A-Z0-9]$i

这看起来不错且高效,但它允许连续的连字符。

最佳答案

首先使用前瞻性来指定允许的字符数。

^(?=.{5,6}$)[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$

DEMO

关于php - 正则表达式匹配字母数字,中间可能只有破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25980528/

相关文章:

php - 动态html字段表单的mysql设计

php - 用 PHP 计算平均评分系统

excel - VBA 正则表达式 - 使用\b 并在单词边界的末尾包含 "-"

ruby - 在 Ruby 中将 Unicode 数字转换为整数

php - 处理超大阵列的最佳实践? D B?

php - 为什么我不能在 nginx 中拥有自己的自定义根指令

PHP:如何对字符串中的字符进行排序?

Python 正则表达式被方括号 ([]) 混淆了?

javascript正则表达式拆分包括分隔符

java - 使用 Gradle 过滤 Java 类