Member 13992723 Ответов: 3

Как сделать регулярное выражение для двухзначной строки запятой типа (1, 23, 45, 67), каждая пара цифр находится между 1 и 95


Всем привет. Я работаю над приложением mvc vb. В одной из моих моделей у меня есть это свойство:

Public Property Ladder As String


Я хочу проверить его с помощью регулярного выражения, чтобы иметь две цифры и запятую выражения типа 1,23,45,67 с этим условием: каждые две цифры находятся между 1-95.

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

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

До сих пор я нашел в интернете следующее регулярное выражение: ^.[0-9,]*$, которое дает true только в том случае, если выражение состоит из цифр и запятых, но это не то, что я хочу.

3 Ответов

Рейтинг:
23

OriginalGriff

Не пытайтесь делать сравнения "значений" - то есть "каждые две цифры находятся между 1 и 95" - потому что регулярные выражения не являются "процессорами значений": они являются текстовыми процессорами, и пока это возможно сделать:

(1|2|3|4|5|6|7|8|9|10|11| ... |93|94|95)
это грязно и трудно поддерживать - особенно когда вы хотите проверить строку как разделенную запятыми, поэтому вам нужно включить бит "распознавания значений" дважды.

Просто распознать разделенную запятыми строку из одной или двух цифр очень просто:
^\d{1,2}(,\d{1,2})*$
Но... проверка значения лучше всего выполняется на языке презентации.


Richard Deeming

Нет необходимости перечислять все числа:

([1-9]|[1-8]\d|9[1-5])

:)

OriginalGriff

Посмотрите, как легко это, чтобы с**К это придумал? Вы пропустили " 90":
([1-9]|[1-8]\d|9[0-5])
И попробуйте: он соответствует первой цифре и игнорирует вторую ...
:смеяться:

Richard Deeming

Не с правильным закреплением и допуском более чем одной группы:

^([1-9]|[1-8]\d|9[0-5])(,([1-9]|[1-8]\d|9[0-5]))*$

Конечно, это не самая простая вещь для чтения. Но это все равно короче, чем перечислить все 95 номеров. :)

OriginalGriff

Да, а потом на следующей неделе руководство говорит: "Можете ли вы сделать это от 1 до 215, но игнорировать 77?" :смех:
Делайте это на языке презентации, а не на регулярном выражении.

Рейтинг:
2

MadMyche

То, что я сделал бы, было бы использовать Split() затем попробуйте преобразовать элементы массива в целые числа, а затем проверьте полученные значения.

Мой VB уже не тот, что был, и на данный момент у меня нет IDE, поэтому в этом примере могут быть синтаксические или другие ошибки.

Dim LadderValues as String[] = Ladder.Split(new Char [] {','});
For Each LadderElement As String In LadderValues
  Dim LadderValue as Integer = -1
  If Integer.TryParse(LadderElement, LadderValue) Then
    If ((LadderValue < 1 ) Or (LadderValue >95 )) Then
        ' Deal with value out of range
    End If
  Else
    ' This element is not an integer
  End If


Рейтинг:
0

Patrice T

Регулярное выражение создается для сопоставления паттернов, сопоставить 1 или 2 цифры легко, но если вы хотите сопоставить от 0 до 95; это возможно, но сложнее.
Часто считается, что проще сопоставить 1 или 2 цифры, а затем иметь код для конкретной проверки.

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