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

Пожалуйста, помогите мне с регулярным выражением, чтобы проверить следующий формат

dd/mm

Это для проверки поля День рождения, а год не требуется.

Спасибо

Ответы [ 3 ]

2 голосов
/ 26 мая 2010
bool foundMatch = false;
foundMatch = Regex.IsMatch(SubjectString, 
    @"^(?:
     (?:[12][0-9]|0?[1-9])/(?:0?2|Feb(?:ruary)?)
     |
     (?:30|[12][0-9]|0?[1-9])/
      (?:
       (?:0?[469]|11)
       |
       Apr(?:il)?|June?|Sep(?:tember)?|Nov(?:ember)?
      )
     |
     (?:3[01]|[12][0-9]|0?[1-9])/
      (?:
       (?:0?[13578]|1[02])
       |
       Jan(?:uary)?|Mar(?:ch)?|May|July?|Aug(?:ust)?|Oct(?:ober)?|Dec(?:ember)?
      )
     )$",  
    RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);

будет соответствовать действительным дням / месяцам. Он всегда будет совпадать с 29 февраля, поскольку не знает года.

Кстати, я сделал это регулярное выражение, используя RegexMagic (слишком утомительно, чтобы делать это вручную - еще один признак того, что это скорее работа для анализатора даты / времени).

0 голосов
/ 26 мая 2010
^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])$

но этот позволит, например, 30/02

0 голосов
/ 26 мая 2010
new Regex(@"^\d{2}/\d{2}$")

или

new Regex(@"^\d\d/\d\d$")

\d представляет собой цифру, а {2} указывает, что она должна повторяться дважды.

Чтобы проверить, является ли это реальной датой, используйте DateTime.TryParseExact:

DateTime date;
bool valid;
valid = DateTime.TryParseExact("00/00", "dd/MM", null, DateTimeStyles.None, out date); // false
valid = DateTime.TryParseExact("30/02", "dd/MM", null, DateTimeStyles.None, out date); // false
valid = DateTime.TryParseExact("27/02", "dd/MM", null, DateTimeStyles.None, out date); // true

Однако это не будет правильно обрабатывать високосные годы. Вероятно, лучшее решение - спросить год рождения.

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