我有一些代码验证 1 到 32 个字符的字符串,该字符串可能仅包含字母数字和连字符 ('-'),但可能不以连字符开头或结尾。
我正在使用 PCRE 正则表达式和 PHP(尽管 PHP 部分在本例中并不重要)。
现在伪代码如下所示:
if (match("/^[\p{L}0-9][\p{L}0-9-]{0,31}$/u", string)
and
not match("/-$/", string))
print "success!"
也就是说,我首先检查字符串的内容是否正确,是否带有“-”并且长度是否正确,然后我运行另一个测试以查看它是否正确以“-”结尾。
关于将其合并到单个 PCRE 正则表达式中,有什么建议吗?
我尝试过使用前瞻/后视断言,但无法让它发挥作用。
最佳答案
尝试这个正则表达式:
/^[\p{L}0-9](?:[\p{L}0-9-]{0,30}[\p{L}0-9])?$/u
如果您想使用环视断言:
/^[\p{L}0-9][\p{L}0-9-]{0,31}$(?<!-)/u
关于php - 如何正则表达式匹配一串数字和连字符,但不以连字符开头或结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2700519/