【问题标题】:Regex to allow one special character with at least 5 digits and maximum 6 digits正则表达式允许一个至少 5 位和最多 6 位的特殊字符
【发布时间】:2016-07-08 09:59:28
【问题描述】:

我创建了一个遵循以下参数的正则表达式:

  • 最小长度:5
  • 最大长度:6
  • 至少需要 5 位数字
  • 允许使用空格和特殊字符:#&()_+[]:;',/.\-"*
  • 不允许使用字母

我创建的正则表达式是:

^\d{3}[_\+\[\]\:\;\'\,\/.\-"!@#$%^&*()\s]{0,1}\d{2,3}$

这满足长度要求和 5 位要求,但不允许特殊字符。由于这个原因,我被阻止并且无法找到任何解决方案,请帮助。

【问题讨论】:

  • 在你的正则表达式中,字符串第四个位置的特殊字符,你想要它在任何地方吗?
  • 是否应该始终以 3 位数字开头,就像您的正则表达式要求的那样?
  • 没有特殊字符在第4位的要求。我是正则表达式的新手,所以我尝试了我认为最好的解决方案。请指导

标签: regex


【解决方案1】:

你可以这样做

^(?:(?=.{6}$)\d*[-#&()_+[\]:;',\/.\\"*]\d*|\d{5,6})$

如果您的正则表达式支持前瞻。

它使用两个交替。首先是检查长度,其中包括 特殊字符 必须始终为 6(以允许 5 位数字),并具有正向预测。然后它匹配任意数量的数字,后跟一个特殊字符,最后是任意数量的数字。

另一种选择只检查 5-6 位数字。

See it here at regex101.

【讨论】:

  • 嗨@ClasG,如果我们必须允许字母而不是特殊字符怎么办?在这个正则表达式中有解决方法吗?非常感谢您的帮助,因为我真的被卡住了
  • 如果同样的规则应该适用,只允许一个 alpha 而不是特殊的 - ^(?:(?=.{6}$)\d*[A-Za-z]\d*|\d{5,6})$。或者取决于语言和正则表达式风格(总是应该在正则表达式问题中说明;)^(?:(?=.{6}$)\d*\p{L}\d*|\d{5,6})$
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多