Подтвердить что ты не робот

Регулярное выражение Матч для проверки действительного года

Учитывая значение, я хочу проверить его, чтобы проверить, действительно ли он год. Мои критерии просты, где значение должно быть целым числом с символами 4. Я знаю, что это не лучшее решение, так как оно не позволит лет до 1000 и позволит использовать такие годы, как 5000. Этот критерий адекватен моему текущему сценарию.

Я придумал

\d{4}$

Пока это работает, оно также допускает отрицательные значения.

Как я могу гарантировать, что допустимы только положительные целые числа?

4b9b3361

Ответ 1

Вам нужно добавить стартовый якорь ^ как:

^\d{4}$

Ваше регулярное выражение \d{4}$ будет соответствовать строкам , которые заканчиваются на 4 цифры. Таким образом, ввод будет таким, как -1234.

Добавив стартовый якорь, вы сопоставляете только те строки, которые начинаются и заканчиваются с 4 цифрами, что фактически означает, что они должны содержать только 4 цифры.

Ответ 2

Годы от 1000 до 2999

^[12][0-9]{3}$

За 1900-2099

^(19|20)\d{2}$

Ответ 3

"Принимаемый" ответ на этот вопрос является неправильным и близоруким.

Неверно, что он будет соответствовать строкам типа 0001, который не является допустимым годом.

Это близорукость в том, что он будет не соответствовать любым значениям выше 9999. Разве мы уже забыли уроки Y2K? Вместо этого используйте регулярное выражение:

^[1-9]\d{3,}$

Если вам нужно сопоставить годы в прошлом, в дополнение к годам в будущем, вы можете использовать это регулярное выражение для соответствия любому положительному целому числу:

^[1-9]\d*$

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

Примечание. Это регулярное выражение будет соответствовать всем годам, в том числе до первого года, поскольку они обычно представлены с обозначением BC вместо отрицательного целого числа. Конечно, эта конвенция может измениться в течение следующих нескольких тысячелетий, поэтому ваш лучший вариант - сопоставить любое целое число-положительное или отрицательное - со следующим регулярным выражением:

^-?[1-9]\d*$

Ответ 4

Это работает с 1900 по 2099 год:

/(?:(?:19|20)[0-9]{2})/

Ответ 5

Основываясь на ответе @r92, на 1970-2019 годы:

(19[789]\d|20[01]\d)

Ответ 6

вы можете пойти с sth, как [^-]\d{4}$: вы запрещаете знак минус - перед 4-мя цифрами.
вы также можете использовать ^\d{4}$ с ^, чтобы поймать начало строки. Это зависит от вашего сценария на самом деле...

Ответ 7

Чтобы протестировать год в строке, содержащей другие слова вместе с годом, вы можете использовать следующее регулярное выражение: \b\d {4}\b

Ответ 8

Теоретически 4-значный вариант является правильным. Но на практике может быть лучше иметь диапазон 1900-2099 гг.

Кроме того, это должна быть группа без захвата. Во многих комментариях и ответах предлагается захват группировки, что не является правильным ИМХО. Потому что для сопоставления это может сработать, но для извлечения совпадений с помощью регулярных выражений он извлечет 4-значные числа и двухзначные (19 и 20) числа также из-за парантеза.

Это будет работать для точного соответствия, используя группы без захвата:

(?:19|20)\d{2}

Ответ 9

Используйте;

^(19|[2-9][0-9])\d{2}$ 

за 1900 - 9999 годы.

Не нужно беспокоиться за 9999 и далее - А.И. к тому времени буду заниматься всем программированием !!! Hehehehe

Вы можете проверить свое регулярное выражение в https://regex101.com/

Также больше информации о не захвативших группах (упомянутых в одном из комментариев выше) здесь http://www.manifold.net/doc/radian/why_do_non-capture_groups_exist_.htm

Ответ 10

Вы можете преобразовать целое число в строку. Поскольку знак минуса не будет соответствовать цифрам, у вас не будет отрицательных лет.

Ответ 11

Я использую это регулярное выражение в Java ^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|[2-9][0-9])[0-9]{2}$

Работает с 1900 по 9999 год.

Ответ 12

/^\d {4} $/ Это проверит, содержит ли строка только 4 числа. В этом случае, чтобы ввести год 989, вы можете вместо этого указать 0989.

Ответ 13

Если вам нужно сопоставить ГГГГ или ГГГГММДД, вы можете использовать:

^((?:(?:(?:(?:(?:[1-9]\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:[2468][048]|[13579][26])00))(?:0?2(?:29)))|(?:(?:[1-9]\d{3})(?:(?:(?:0?[13578]|1[02])(?:31))|(?:(?:0?[13-9]|1[0-2])(?:29|30))|(?:(?:0?[1-9])|(?:1[0-2]))(?:0?[1-9]|1\d|2[0-8])))))|(?:19|20)\d{2})$

Ответ 14

Вы также можете использовать это.

([0-2][0-9]|3[0-1])\/([0-1][0-2])\/(19[789]\d|20[01]\d)