密码的正则表达式

时间:2015-04-27 15:32:35

标签: regex

我创建了一个接受产品代码的文本字段。 我尝试了很多方法并且感到很失望。 产品代码有一些验证,如下,

Product code :315299AZ

1.First 2 digits ranges from[01-31].,should not contain 00.
2.Second 2 digits ranges from [01-52]., should not contain 00.
3.Third 2 digits ranges from [00-99].
4.Last 2 are optional. But should accept only alphabets. Should not accepts numbers.

请有人帮我摆脱它。

3 个答案:

答案 0 :(得分:5)

您可以使用以下正则表达式:

(?!00)(([0-2][0-9])|31|30)(?!00)(([0-4][0-9])|51|50|52)(\d{2})([a-zA-Z]{2})?

(?!00)是一个不允许00的否定前瞻。

Regular expression visualization

Debuggex Demo

答案 1 :(得分:3)

你去了:

((0[1-9])|([1-2]\d)|(3[0-1]))((0[1-9])|([1-4]\d)|(5[0-2]))\d{2}([a-zA-Z]{2})?

如果您不喜欢预见。

答案 2 :(得分:2)

我知道这不是精神,但任何支持正则表达式的合理语言应该允许你访问组,因此沿着这些行做一些事情(伪代码如下):

if product_code matches /^(\d\d)(\d\d)\d\d([a-zA-Z]{2})?$/ {
    assert 1 <= int($1) <= 31 // validate first group
    assert 1 <= int($2) <= 52 // validate second group
}

奖励:你实际上可以阅读它。

(假设最后一个可选组包含两个或零个字符。如果一个字符可以接受,则可以将其替换为[a-zA-Z]{0,2}