регулярное выражение для интервала лет - PullRequest
3 голосов
/ 23 января 2010

В 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);
}

Почему это не получается?

Ответы [ 5 ]

3 голосов
/ 23 января 2010

Попробуйте это:

^(19|20)\d{2}$
2 голосов
/ 23 января 2010

Для работы 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;
)
2 голосов
/ 23 января 2010

Вы должны пропустить [], так как это индикаторы для классов персонажей

/^(19\d\d|20\d\d)$/

также, регулярные выражения медленные. использование if(date <= 2099 && date>=1900) намного быстрее

0 голосов
/ 23 января 2010

В 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
0 голосов
/ 23 января 2010

Попробуйте это:

^ ((19 \ d \ d) | (20 \ d \ d)) $

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...