我如何使用正则表达式验证此模式

时间:2018-01-18 10:13:16

标签: regex

我尝试编写一个正则表达式来验证模式,但是我遇到了一些问题。 这是我应该使用正则表达式进行验证的模式

XXXX
XXXX-XXXX
XXXX-XXXX-XXXX-XXXX-XXXX

每个X都是一个Int号[0-9]

我正在尝试这个:

[0-9]{4}(-?[0-9]{4})?

但它给了我这种模式:

**4586-4584**-**5588-5558**-**5888-5545**

enter image description here

知道如何解决这个问题吗?提前谢谢!

5 个答案:

答案 0 :(得分:1)

[0-9]{4}(-[0-9]{4})*

试试这个,你需要-,不能在它前面添加?。添加*代替?,因为可能有多个

(?<![0-9\-])[0-9]{4}(-[0-9]{4})*(?![0-9\-])

这个不匹配1234-5667-78961234

答案 1 :(得分:1)

^(\d{4})(-(\d{4})){0,5}$

如果我理解正确,您正在寻找XXXX的图案(所以每X是一个数字),显示1到6次,中间用连字符。

因此,前4位数字是强制性,然后可能会有1到5次出现-XXXX

请注意^$,以确保正则表达式不匹配字符串的一部分。

答案 2 :(得分:1)

您的模式[0-9]{4}(-?[0-9]{4})?使用可选的连字符-?和可选组(-?[0-9]{4})

可选连字符-?将允许连续8位数字(4位数后跟4位数字)。

可选组仅允许0或1次出现,因此XXXX-XXXX-XXXX将不匹配。

不在行的开头和结尾使用锚点,将匹配3333-3333中的333-3333-3333

您可以将正则表达式更新为^[0-9]{4}(-[0-9]{4})*$\d^\d{4}(?:-\d{4})*$

<强>解释

  • 从字符串^
  • 的开头
  • 4位\d{4}
  • 用于匹配连字符和4位数(?:-\d{4})
  • 的非捕获组
  • 将该组重复零次或多次*
  • 字符串$
  • 的结尾

答案 3 :(得分:0)

尝试使用此模式:

    (\b([0-9]){4}\b)|(\b([0-9]){4}\-([0-9]){4}\b)|(\b([0-9]){4}\-([0-9]){4}\-([0-9]){4}\b)|(\b([0-9]){4}\-([0-9]){4}\-([0-9]){4}\-([0-9]){4}\b)

Demo

答案 4 :(得分:-2)

这应该这样做。只是尝试使用C#。

[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}