我创建了一个接受产品代码的文本字段。 我尝试了很多方法并且感到很失望。 产品代码有一些验证,如下,
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.
请有人帮我摆脱它。
答案 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
的否定前瞻。
答案 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}
)