【问题标题】:PCRE Regex non-consecutive repeatingPCRE正则表达式非连续重复
【发布时间】:2021-04-13 04:28:22
【问题描述】:

我正在尝试最少 6 个字符,最多 15 个字符。首先必须是字母数字(无特殊),下一个(最多)13 是字母数字,并且可以包括非连续(一次只能包含以下之一)下划线或句点或连字符,然后最后一个字符必须是字母数字。

好的例子:A_3.hj_3J

示例不行:F__3d66.K

示例不行:6-_sd.6h9

这是我到目前为止所拥有的,我觉得它很接近但很烦人。 我做错了什么?

^[a-zA-Z0-9]{1}([_.-]?[a-zA-Z0-9])\S{4,13}[a-zA-Z0-9]{1}$

【问题讨论】:

  • 另一个关于单词边界的想法:^\b(?!.*?[._-]{2})[\w.-]{6,15}\b$
  • @bobblebubble:您的正则表达式也将允许_13.hj_3_
  • @anubhava 好收获!我忽略了这一点(:

标签: php regex pcre


【解决方案1】:

有几个问题:

  1. 您的正则表达式模式也将匹配超过 15 个字符的输入。
  2. 由于使用了\S,您的正则表达式还会在中间出现其他不允许的字符,例如@#

您可以通过使用负前瞻来禁止连续出现句点/连字符/下划线并从允许任何非空格字符的正则表达式中间删除 \S 来修复它

^[a-zA-Z0-9](?!.*[_.-]{2})[\w.-]{4,13}[a-zA-Z0-9]$

RegEx Demo

【讨论】:

  • 倒数第二个字符导致失败:( a-dFegv_f
  • 它有效,而且看起来比另一个简单!谢谢@anubhava,我已经研究了几个小时,但它越来越没有意义了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2023-03-20
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多