在C#中,我想编写一个只接受1900年到2099年之间的正则表达式。
我尝试了^([1][9]\d\d|[2][0]\d\d)$
,但这不起作用。有什么想法吗?
所以我上课了:
[NotNullValidator(MessageTemplate = "Anul nu poate sa lipseasca!")]
// [RangeValidator(1900, RangeBoundaryType.Inclusive, 2100, RangeBoundaryType.Inclusive, MessageTemplate = "Anul trebuie sa contina 4 caractere!")]
[RegexValidator(@"(19|20)\d{2}$", MessageTemplate = "Anul trebuie sa fie valid!", Ruleset = "validare_an")]
public int anStart
{
get;
set;
}
在测试方法中:
[TestMethod()]
public void anStartTest()
{
AnUnivBO target = new AnUnivBO() { anStart = 2009 };
ValidationResults vr = Validation.Validate<AnUnivBO>(target, "validare_an");
Assert.IsTrue(vr.IsValid);
}
为什么会失败?
答案 0 :(得分:3)
试试这个:
^(19|20)\d{2}$
答案 1 :(得分:2)
你应该省略[]
,因为那些是角色类的指标
/^(19\d\d|20\d\d)$/
另外,正则表达式很慢。使用if(date <= 2099 && date>=1900)
要快得多
答案 2 :(得分:2)
你需要使用字符串属性而不是整数才能使RegexValidator工作:
public string anStart
{
get;
set;
}
在您的测试方法中,您需要使用:
AnUnivBO target = new AnUnivBO() { anStart = "2009" };
要继续使用整数,请使用RangeValidator:
[RangeValidator(1900, RangeBoundaryType.Inclusive,
2099, RangeBoundaryType.Inclusive)]
public anStartint anStart
{
get; set;
)
答案 3 :(得分:0)
试试这个:
^((19 \ d \ d)|(20 \ d \ d))$
答案 4 :(得分:0)
在Python中,^(19|20)\d\d$
有效。
>>> import re
>>> pat=re.compile("^(19|20)\\d\\d$")
>>> print re.match(pat,'1999')
<_sre.SRE_Match object at 0xb7c714a0>
>>> print re.match(pat,'2099')
<_sre.SRE_Match object at 0xb7c714a0>
>>> print re.match(pat,'1899')
None
>>> print re.match(pat,'2199')
None
>>> print re.match(pat,'21AA')
None