2016-06-08 5 views
0

Мне нужно регулярное выражение, которое принимает минимальное и максимальное число для определения допустимого ввода. И я хочу, чтобы максимум и минимум были динамическими.regex для числа между номерами

Я пытался получить это сделать, используя эту ссылку https://stackoverflow.com/a/13473595/1866676

Но не мог заставить его работать. так может кто-то, пожалуйста, дайте мне знать, как это сделать.

------ Обновление на Wiktor Stribiżew запроса ---------

Пусть говорят, что я хочу сделать входной html5 коробку, и я хочу, чтобы получать только номера от 100 до 1999

Что бы я хотел выглядеть в регулярном выражении? выражение самого регулярного выражения должно иметь какое-либо отношение к тому, какой код ему следует использовать, поскольку я буду использовать его на Android, iOS и веб-страницах.

+2

Не могли бы вы обновить свой вопрос: 1) ваш образец ввода с ожидаемым поведением 2) что вы точно пробовали и как 3) и, конечно, ваш язык программирования. –

+0

Я предлагаю вам взглянуть на [Как написать регулярное выражение, соответствующее IPv4] (https://blogs.msdn.microsoft.com/oldnewthing/20060522-08/?p=31113/). Это не ответ (или даже форум), но интересно читать и подчеркивает, почему вы можете делать много вещей с помощью регулярных выражений, но вы не всегда должны их делать. Что касается вашего вопроса, если числа не исправлены, вы явно не можете написать статическое регулярное выражение, и если вы можете использовать язык программирования для построения выражения, вы, вероятно, можете использовать этот язык, чтобы просто сравнивать числа в более простом виде. –

+0

@ WiktorStribiżew попробовал обновить его по вашему запросу – DaCh

ответ

5

Вот как это своего рода регулярное выражение работает

ones: ^[0-9]$ // just set the numbers -- matches 0 to 9 
tens: ^[1-3]?[0-9]$ //set max tens and max ones -- matches 0 to 39 
tens where max does not end in 9 ^[1-2]?[0-9]$|^[3][0-4]$ // 0 to 34 
only tens: ^[1][5-9]$|^[2-3][0-9]$|^[4][0-5]$ // 15 to 45 

Здесь, позволяет выбрать произвольное число 1234 к 2345

^[1][2][3][4-9]$| 
^[1][2][4-9][0-9]$| 
^[1][3-9][0-9][0-9]$| 
^[2][0-2][0-9][0-9]$| 
^[2][3][0-3][0-9]$| 
^[2][3][4][0-5]$ 

https://regex101.com/r/pP8rQ7/4

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

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

Его немного сложнее, но его нигде почти невозможно спроектировать пользовательский диапазон с небольшим количеством мыслей.

Если вы более конкретно, мы можем создать точный пример, но это, как правило, так: beginning-range|middle-range|end-range В некоторых случаях вам понадобятся только начальные или конечные диапазоны, например, если min или max не заканчиваются 9.? означает, что диапазон, который приходит после него, является необязательным. (так, например, в первом случае он позволяет иметь как одиночные, так и двойные числа.

так за 100 - 1999 это очень просто на самом деле, потому что у вас есть много 9 и 0

/^[1-9][0-9][0-9]$|^[1][0-9][0-9][0-9]$/ 

https://regex101.com/r/pP8rQ7/1

Примечание: единичные значения не нужны диапазоны [N] Я просто добавил их читаемость.

+0

'Здесь можно выбрать произвольное число от 1234 до 2345', если это понимать. если я использую это регулярное выражение, я бы смог ввести 2344? я прав? – DaCh

+0

ugh wait Я сделал ошибку - исправление – yosefrow

+1

У вас есть мой +1 для информации, но это выражение должно быть помещено где-то, и оно находится на увеличенной картинке, где весь подход начинает мерцать. Если вы поместите его в атрибут '', вы написали свернутую замену для 'max/min'. Если вы подтвердите с помощью JavaScript, вы написали свернутую замену для '<' and '>'. И так далее. –

1

По существу, вы не можете.

Для каждого числового диапазона существует регулярное выражение, которое будет соответствовать номерам в этом диапазоне, поэтому можно написать код, который может генерировать такое регулярное выражение. Но такое регулярное выражение не является простым переформатированием концов диапазона.

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

+1

Не эксперт на эту тему, но так как это html5, ему нужно регулярное выражение, чтобы отфильтровать его. Если нет, он должен будет передать значения на другую страницу, чтобы проверить их? '^ [1-9] [0-9] [0-9] $ |^1 [0-9] [0-9] [0-9] $' поймает все это? – Andreas

+0

@ Аndreas вы правы. Я разработал для этого систему. это легче, чем можно было бы подумать. Посмотрите ответ ниже Хотя в определенных ситуациях это может быть слишком много, поскольку Богемский предложил – yosefrow

1

С HTML 5 просто положить диапазон ввода ...

<form> 
    Quantity (between 100 and 1999): 
    <input type="number" name="quantity" min="100" max="1999"> 
</form> 

с регулярным выражением:

^([12345679])(\d)(\d)|^(1)(\d)(\d)(\d) 

Так что, если вам нужно создать регулярное выражение динамически это возможно, но немного сложнее и сложный

+0

Из любопытства ... Может ли обычный HTML навязать ограничение или просто будет стилизовать элемент соответственно? –

+0

Значение будет ограничено, но Примечание. Максимальные и минимальные атрибуты входного тега не поддерживаются в Internet Explorer 9 и более ранних версиях .-- Примечание. Максимальные и минимальные атрибуты не будут работать для дат и времени в Internet Explorer 10 (и новее) или Firefox, поскольку IE 10+ и Firefox не поддерживают эти типы ввода. Примечание: любой может подделать проверку на стороне клиента, поэтому всегда важно проверить на сервере также http: //www.w3schools .com/tags/tryit.asp? filename = tryhtml5_input_max_min – yosefrow

+0

Конечно, любой ввод может быть поддельной клиентской стороной, поэтому вам нужна сторона сервера проверки (javascript можно пропустить с более сложным, но пропущенным как обычный ввод). – MrPk

Смежные вопросы