【问题标题】:Avoiding repeating characters through regEx通过正则表达式避免重复字符
【发布时间】:2015-09-05 15:29:12
【问题描述】:

我有以下四种 RegEx 模式

  string strIMEIRegEx = "^[0-9]{15}$";
  string strIMEIRegExAlt = "^[a-fA-F0-9]{14}$";
  string strNameRegEx = "^[0-9A-Za-z ]{1,50}$";
  string strNameRegEx = @"^(a-z|A-Z|0-9)*[^$%^&*;:,<>?()\""\']*$";

问题

  1. 对于strIMEIRegExstrIMEIRegExAlt,它允许重复计数为 14 的 0(例如 - 00000000000000),这是我需要避免的。它也不应该在开头允许 0。
  2. 对于 strNameRegEx 和 strNameRegExit allows any single character string (For E.g it accepts"@","!","q","1"`) 。此 RegEx 应允许使用字母数字(带/不带允许的特殊字符)

我知道我必须使用 (.)\1{"Number of repeating characters wants to avoid",} 更新上述 RegEx,但我无法弄清楚如何使用上述 RegEx 模式进行此修复。

【问题讨论】:

  • 投反对票的请说明原因。
  • 不是反对者,但你能解释第二个条件吗?您将第二个正则表达式限制为接受至少一个字符。 1 是数字。那么呢?
  • @AvinashRaj 关于 strNameRegEx 。它也允许空字符串。目前它允许“@”之类的字符串,我想通过将其设为字母数字(带/不带允许的特殊字符)来避免这种情况。希望它澄清。如果需要进一步解释,请告诉我兄弟。

标签: javascript c# regex


【解决方案1】:

1 - 对于 strIMEIRegEx 和 strIMEIRegExAlt,它允许重复 0,计数为 14(例如 - 00000000000000),这是我需要避免的。

在开始时使用否定的前瞻断言。

string strIMEIRegEx = "^(?!0+$)[1-9][0-9]{14}$";
string strIMEIRegExAlt = "^(?!0+$)[a-fA-F1-9][a-fA-F0-9]{13}$";

一旦问题得到更新,我将更新我对第二种情况的回答,因为当前的问题并不清楚。

【讨论】:

  • 能否请您更新正则表达式,使其开头不允许为 0。
  • 检查我的更新。编辑问题或尽快向回答者提问。
  • 关于 strNameRegEx 。它也允许空字符串。目前它允许“@”之类的字符串,我想通过将其设为字母数字(带/不带允许的特殊字符)来避免这种情况。希望它澄清。如果需要进一步解释,请告诉我兄弟
  • 试试string strNameRegEx = @"^[a-zA-Z0-9]+(?: [a-zA-Z0-9]+)*$"。如果不是,则为第二个发布有效和无效的匹配项。
猜你喜欢
  • 1970-01-01
  • 2012-02-07
  • 2015-04-29
  • 2018-06-02
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多