Учитывая значение, я хочу проверить его, чтобы проверить, является ли он действительным годом. Мои критерии просты, где значение должно быть целым числом с 4
символами. Я знаю, что это не лучшее решение, поскольку оно не позволит годами раньше, 1000
а позволит годам, например 5000
. Этот критерий подходит для моего текущего сценария.
Я придумал
\d{4}$
Хотя это работает, также допускаются отрицательные значения.
Как убедиться, что разрешены только положительные целые числа?
regex
string
validation
string-matching
Ранхиру Джуд Курай
источник
источник
Ответы:
Вам нужно добавить начальную привязку
^
как:^\d{4}$
Ваше регулярное выражение
\d{4}$
будет соответствовать строкам , заканчивающимся 4 цифрами . Так что ввод вроде-1234
будет принят.Добавляя начальную привязку, вы сопоставляете только те строки, которые начинаются и заканчиваются 4 цифрами, что фактически означает, что они должны содержать только 4 цифры.
источник
whateverblahblah2323
. Теперь я понимаю, почему небольшое обучение опасно: О10000
было бы ошибкой.Годы с 1000 по 2999
^[12][0-9]{3}$
На 1900-2099 гг.
^(19|20)\d{2}$
источник
^(?:19|20)\d{2}$
(19|20)\d{2}
в свое регулярное выражение, чтобы проверить формат даты рождения? Это мое регулярное выражение,/^[0-9]{1,2}\/(0[1-9])|(1[0-2])\/[0-9]{4}$/
я хочу, чтобы год всегда«Принятый» ответ на этот вопрос одновременно неверен и близорук.
Это неверно в том смысле, что он будет соответствовать таким строкам, как
0001
, который не является допустимым годом.Это близоруко в том смысле, что он не будет соответствовать никаким значениям выше 9999. Неужели мы уже забыли уроки 2000 года ? Вместо этого используйте регулярное выражение:
^[1-9]\d{3,}$
Если вам нужно сопоставить годы в прошлом, в дополнение к годам в будущем, вы можете использовать это регулярное выражение для сопоставления любого положительного целого числа:
^[1-9]\d*$
Даже если вы не ожидаете дат из прошлого, вы все равно можете использовать это регулярное выражение, на всякий случай, если кто-то изобрел машину времени и захочет забрать ваше программное обеспечение с собой.
Примечание. Это регулярное выражение будет соответствовать всем годам, включая годы до 1 года, поскольку они обычно представлены с обозначением BC вместо отрицательного целого числа. Конечно, это соглашение может измениться в течение следующих нескольких тысячелетий, поэтому лучше всего сопоставить любое целое число - положительное или отрицательное - с помощью следующего регулярного выражения:
^-?[1-9]\d*$
источник
Это работает с 1900 по 2099 год:
/(?:(?:19|20)[0-9]{2})/
источник
Основываясь на ответе @ r92 за 1970-2019 годы:
(19[789]\d|20[01]\d)
источник
197999
19[789]\d\d\d
позволит197999
/(19[789]\d|20[01]\d)/.test(1970324) >> true
1970
), а не последним 3. Что насчет(19[789]\d|20[01]\d)[^0-9]
? Это будет совпадать,1970 324
но нет1970324
Теоретически вариант с 4 цифрами правильный. Но на практике было бы лучше иметь диапазон 1900-2099 гг.
Кроме того, это должна быть группа без захвата. Многие комментарии и ответы предлагают группировку захвата, что не является правильным ИМХО. Потому что для сопоставления он может работать, но для извлечения совпадений с использованием регулярного выражения он будет извлекать четырехзначные числа и двухзначные (19 и 20) числа также из-за парантеза.
Это будет работать для точного сопоставления с использованием групп без захвата:
(?:19|20)\d{2}
источник
вы можете использовать что-то вроде [
^-]\d{4}$
: вы не допускаете, чтобы знак минус-
был перед 4-мя цифрами.вы также можете использовать
^\d{4}$
with,^
чтобы поймать начало строки. На самом деле это зависит от вашего сценария ...источник
Чтобы проверить год в строке, которая содержит другие слова вместе с годом, вы можете использовать следующее регулярное выражение: \ b \ d {4} \ b
источник
Использование;
^(19|[2-9][0-9])\d{2}$
за 1900 - 9999 гг.
Не нужно беспокоиться о 9999 и новее - к тому времени все программирование будет делать ИИ !!! Хехехехе
Вы можете проверить свое регулярное выражение на https://regex101.com/
Также больше информации о группах без захвата (упомянутых в одном из комментариев выше) здесь http://www.manifold.net/doc/radian/why_do_non-capture_groups_exist_.htm
источник
Вы можете преобразовать целое число в строку. Поскольку знак минус не будет соответствовать цифрам, у вас не будет отрицательных лет.
источник
Я использую это регулярное выражение в Java
^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|[2-9][0-9])[0-9]{2}$
Работает с 1900 по 9999 гг.
источник
/ ^ \ d {4} $ / Это проверяет, состоит ли строка только из 4 чисел. В этом сценарии для ввода 989 года вы можете вместо этого ввести 0989.
источник
Если вам нужно сопоставить YYYY или YYYYMMDD, вы можете использовать:
^((?:(?:(?:(?:(?:[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})$
источник
Вы также можете использовать это.
([0-2][0-9]|3[0-1])\/([0-1][0-2])\/(19[789]\d|20[01]\d)
источник
00/00/2000
или31/02/1999
и еще много ложных дат.(0[1-9]|1[0-2])
это гораздо лучшее выражение для месяца