【问题标题】:Regex - Don't allow uppercase正则表达式 - 不允许大写
【发布时间】:2023-03-11 22:17:02
【问题描述】:

我目前正在前端 (Vuetify) 和后端 (Laravel) 上验证用户名,如何在 Regex 中添加检查以排除大写字符:

^(?!.*\.\.)(?!.*\.$)[^\W][\w.]{0,29}$

而不是\wWord - 匹配任何单词字符(字母数字和下划线))我尝试过这样的事情,但它仍然允许大写字符:

^(?!.*\.\.)(?!.*\.$)[^\W][a-z0-9_.]{0,29}$

这些字符串中的期望结果验证:

  • riegiejeyaranchen
  • riegie.jeyaranchen
  • _riegie.jeyaranchen
  • riegie._.jeyaranchen
  • riegie.___.wewsd

这些都失败了:

  • Riegie.Jeyaranchen
  • .riegie
  • riegie..jeyaranchen
  • 里吉。
  • 里吉

【问题讨论】:

  • 如果你也解释一下你到底想允许什么会更容易。
  • 请添加示例字符串。这也适用于 JS 或 PHP?
  • 你为什么不把它们小写呢? strtolower($username); 不要唠叨用户。
  • @MarkusZeller 你看我想在用户输入他们的用户名时在前端验证,在前端传递之后我也将使用相同的正则表达式在后端验证
  • 我在regexr.com 上测试了你的正则表达式我没有发现任何问题。你试过在这里检查吗?

标签: javascript regex


【解决方案1】:

你可以使用:

^(?!.*\.\.)(?!.*\.$)[a-z0-9_][a-z0-9_.]{1,28}$

这将满足您的要求。 [^\W] 允许在 29 个字符检查之前使用任何字母数字字符或下划线。这也是一个双重否定,更容易写,\w

您可以在这里看到它的功能,https://regex101.com/r/Bh6Tbd/2/,与 https://regex101.com/r/Bh6Tbd/3/ 相比。

【讨论】:

  • 当你输入Riegie时它仍然可以通过,但它应该失败,我不想允许任何大写字符
  • @DenissMuntjans Riegie 不匹配。请看演示。
  • 您也可以在负前瞻上使用or 来简化一点。 (?!.*(\.\.|\.$))
  • 丹尼斯,这个答案与你的正则表达式很接近,但你可以删除 (?!.*\.$) 并将 {1,28}$ 更改为 {1,28}(?<!\.)$,((?<!\.) 是一个消极的后视)或替换 [a-z0-9_.]{1,28}[a-z0-9_.]{0,27}[a-z0-9_].
猜你喜欢
  • 1970-01-01
  • 2017-01-10
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多