Регулярное выражение для совпадения только с нечетным или четным числом - PullRequest
26 голосов
/ 28 марта 2009

У меня есть список текстовых записей, которые пользователь может ввести в базу данных, и мне нужно проверить эти входные данные с помощью регулярных выражений, потому что некоторые из них являются сложными. В одном из полей должны быть пропуски в числах (т. Е. 10, 12, 14, 16 ...). У меня вопрос, есть ли конструкция Regex, которая позволила бы мне сопоставлять только четные или нечетные серии? Я знаю, что могу извлечь это значение и выполнить проверку деления, но я надеялся, что это будет чистое решение Regex, если это возможно.

[Изменить]

Решением, которое я в итоге использовал на этом, была адаптация JaredPar, потому что в дополнение к необходимости нечетных или четных мне также нужно было ограничить диапазон (то есть все четные числа между 10-40). Ниже закончено регулярное выражение.

^ [123] [02468] $

Ответы [ 3 ]

61 голосов
/ 28 марта 2009

Нечетные числа

"^\d*[13579]$"

Четные числа

"^\d*[02468]$"

Прогон шансов с разделителем пробелов и потенциальными пробелами

"$\s*(\d*[13579]\s*,\s*)*\d*[13579]$"

Прогон событий с разделителем пробелов и потенциальными пробелами

"$\s*(\d*[02468]\s*,\s*)*\d*[02468]$"
5 голосов
/ 28 марта 2009

Regex на самом деле не так уж сложно спроектировать, если принять во внимание, что четное или нечетное число можно проверить, только взглянув на последнюю цифру, которая должна быть четной или нечетной. Таким образом, регулярное выражение для нечетных чисел может быть:

"^(\s*\d*[13579]\s*,)*(\s*\d*[13579]\s*)$"

Заменить [13579] на [02468] для четных чисел ...

2 голосов
/ 28 марта 2009

Вы имеете в виду что-то вроде:

/(\d*[02468](, *\d*[02468]))|(\d*[13579](, *\d*[13579]))/

или одно из трех возможных толкований вашего вопроса как сформулированное?

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