jaideepsinh Ответов: 4

Регулярные выражения для сопоставления месяца и года


Я хочу проверить свою строку на месяц и год, например "июнь 2016", Может ли кто-нибудь помочь мне решить эту проблему.

Что я уже пробовал:

если (!$("#txtmonthyear").функция val().отделка().матч("^[0-9 ]*[а-Яа-я ]+[а-Яа-З0-9 ]*$")) {
возвращать false;
}

Richard MacCutchan

Посмотрите на ваши исходные данные:
1. Начинается с верхнего регистра [a-я] (или, может быть, только буквы названий месяцев)
2. Далее следует до 8 строчных букв [a-z]
3. Далее следует пробел
4. Далее следуют четыре цифры, первая из которых не равна 0

Ваш образец выше не выглядит так, как будто он соответствует.

4 Ответов

Рейтинг:
2

Richard MacCutchan

Попробовать это:

[ADFJMNOS][a-z]+ [12][0-9][0-9][0-9]\b

что, без сомнения, можно улучшить.

[редактировать]
Такие как:
[ADFJMNOS][a-z]{2,8}\s[12][0-9]{3}\b

[/редактировать]


jaideepsinh

Мне нравится этот пользователь :
если (!$("#txtmonthyear").функция val().отделка().матч("^[ADFJMNOS][а-я]+ [12][0-9][0-9][0-9]*$")) {
возвращать false;
}
но не работает

Richard MacCutchan

Я проверил вышеизложенное, и это сработало для двух разных дат. Вам нужно точно проверить, с какой строкой вы пытаетесь сопоставить.

jaideepsinh

это не проверка, что последние четыре символа-это число или нет, это только проверка, что последний символ-это число.

Richard MacCutchan

Нет, это не так, вы добавили звездочку после последнего [0-9]. И вы до сих пор не объяснили, какую строку вы пытаетесь сопоставить.

jaideepsinh

я проверяю это "Ja 20000", и это не работает в моем коде c#

Richard MacCutchan

Попробуйте добавить \b в конце маски, как показано в моих обновлениях выше.

Рейтинг:
2

Nathan Minier

Я регулярно использую библиотека регулярных выражений[^], чтобы помочь найти и проверить регулярное выражение.

Тем не менее, я думаю, что это хорошая вещь, чтобы узнать, как эти вещи работают для себя. МС имеет некоторые действительно хорошие рекомендации для использования регулярных выражений в C#:
Язык Регулярных Выражений-Краткий Справочник[^]

В вашем случае вам нужен месяц и год. Мы могли бы использовать регулярное выражение для извлечения их из строки и использовать валидатор post-submit, но, похоже, вам нужна предварительная отправка, поэтому мы сделаем это легко.

"^[a-zA-Z]+\s{1}[0-9]{4}$"


Этот простой валидатор просто оценит, что за словом следует пробел, а за ним-4-значное число. Вот поломка:
^ Начните оценку с первого символа строки.
[a-zA-Z]+ совпадение буквенных символов, Нижнего и верхнего регистра, один или несколько раз.
\s{1} совпадают с пробелами ровно один раз.
[0-9]{4} сопоставьте числовую цифру ровно 4 раза
$ соответствует строке Терминатор

Вы можете сделать гораздо больше с регулярным выражением, если захотите. Это чрезвычайно полезный инструмент, который слишком часто игнорируется из-за косого синтаксиса.


Рейтинг:
2

Patrice T

Не решение, а инструменты, я рекомендую последний для отладки регулярного выражения:

Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
Это показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]


Рейтинг:
0

Peter Leow

Если вы настаиваете на регулярном выражении, то попробуйте это:

January|February|June\s\d{4}

Вам придется заполнить остальные названия месяцев.
Однако использование регулярных выражений для проверки даты не является ни эффективным, ни надежным, поскольку оно имеет слишком много форматов.
Вместо этого попробуйте значение datetime.Метод TryParseExact (Система)[^]. См. пример ниже:
using System;
using System.Globalization;
					
public class Program
{
	public static void Main()
	{
		string input = "June 2016";
		string format = "MMMM yyyy";
		DateTime dateTime;
		if (DateTime.TryParseExact(input, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
		{
	    	//Console.WriteLine(dateTime);
			Console.Write("valid");
		} else {
			Console.Write("Not Valid");
		}		
	}
}