【问题标题】:Iranian postal code validation伊朗邮政编码验证
【发布时间】:2018-07-21 01:09:43
【问题描述】:

请,我需要使用 regex 验证伊朗邮政编码。 我为这种情况编写了这个正则表达式\b([^02\n\D]){4}[^5](\d){5},但它不适用于规则号 5 和 7。 请帮我解决它。

这是关于这个正则表达式的一些规则:

  1. 都是数字

  2. 10 位数计数

  3. 不要在前 5 位使用 0

  4. 不要在邮政编码中使用 2

  5. 前4位不一样

  6. 第5位不能是5

  7. 所有数字都不相同

【问题讨论】:

  • 特别是添加一个MCVE 并使用匹配或不匹配的示例详细说明规则。
  • 这似乎不是 RegEx 的工作

标签: regex regular-language


【解决方案1】:

以下正则表达式满足您的条件:

\b(?!(\d)\1{3})[13-9]{4}[1346-9][013-9]{5}\b

Click for Demo

说明:

  • \b - 单词边界
  • (?!(\d)\1{3}) - 负前瞻以确保前 4 位不相同。
  • [13-9]{4} - 匹配除 0 和 2 之外的所有数字的 4 次出现
  • [1346-9] - 匹配不是0、2 或5 的单个数字
  • [013-9]{5} - 匹配除 2 之外的所有数字出现 5 次
  • \b - 单词边界

【讨论】:

  • 真的很抱歉,但我读了一些关于伊朗邮政编码的文章,似乎0 可以在后 5 位,但不能在前 5 位,我解决了我的问题
  • @MasOOd.KamYab 我已经更新了解决方案。另外,查看演示
  • (?!(\d)\1{3}) - 负前瞻以确保前 3 位不相同。
  • @WonkotheSane 解释需要牢记不同类型的观众。我尽量给出一个详尽的答案,不管它的复杂程度,这样在 cmets 部分的来回交流就更少了。 :)
  • @GurmanjotSingh - 我完全同意。我只知道,当我遇到有人为其编写了精心编写的正则表达式的代码时,我会低声咒骂。 :)
猜你喜欢
  • 1970-01-01
  • 2013-10-09
  • 2014-09-08
  • 1970-01-01
  • 2022-12-11
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多