php - 匹配 2-20 个字母数字字符的正则表达式,允许在字符串中的任何位置使用单个连字符

标签 php regex

我正在尝试学习如何使用 preg_match。我希望用户只能使用 2-20 个字符的用户名注册,其中可以包含 a-zA-Z0-9。

现在是我迷路的棘手部分,我希望他们能够在用户名的任何位置包含一个连字符,

-Brad = TRUE

--Brad = FALSE

B-Rad = TRUE

最佳答案

您可以逐步构建它。您想要一个由 2-20 个特定字符组成的用户名:

^[a-zA-Z0-9]{2,20}$

现在你想在某处允许单个 - 字符(技巧部分):

- 字符仅在其后没有跟随另一个 - 到字符串末尾时才允许使用:

[-](?=[^-]*$)

这就是所谓的先行断言。结合交替,正则表达式完成为:

^(?:[a-zA-Z0-9]|[-](?=[^-]*$)){2,20}$

与给出的其他答案相比,这个答案符合您的长度规范。

关于php - 匹配 2-20 个字母数字字符的正则表达式,允许在字符串中的任何位置使用单个连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9656886/

相关文章:

javascript - 为什么 *.* 在正则表达式中返回 undefined

php - 如何将 VB.NET 连接到 Web 主机

PHP:计算重复项并删除重复行

php - 如何在 View 中调用辅助类的函数 - Laravel 5.8?

php - 将对象数组存储到mysql数据库

regex - TCL/EXPECT中正则表达式的含义

python - 在pymongo中查询 "like"

javascript - 从外部 URL 将 CSV 文件上传到 mysql

java - 什么是 Java 正则表达式来匹配数字然后空格然后 3 个字母字符?

Java 忽略正则表达式以使用 BlueJ 删除重复行