Я создаю систему печати, и в определенный момент мне нужно использовать рекурсивное регулярное выражение для проверки onkeypress ввода, позволяя его принимать, только если оно соответствует этому регулярному выражению. Но это рекурсивное выражение!Рекурсивное регулярное выражение для проверочных диапазонов
Некоторые достоверные данные:
[0]: "1-9"
[1]: "1"
[2]: "1-9,1"
[3]: "1,1-9,2,1-8"
Было бы очень легко в EBNF:
validation = (number) | (number, '-', number), ',', validation ;
number = digit, { digit } ;
digit = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 ;
Но регулярное выражение не такой же подход, как делает EBNF. Я читал о рекурсивных регулярных выражениях, но я все еще смущен ими. Моя текущая нерекурсивна попытка, которая проверяет 1/1 каждую запятую расщепляется допустимого значение:
/([0-9]*)|(([0-9]*)-([0-9]*))/g
Таким образом, я могу подтверждено каждую запись по отдельности, но выяснить способ проверить все содержимое.
временное решение А:
pattern = /([0-9]*)|(([0-9]*)-([0-9]*))/g
fields = fieldValues.split(',')
И я создавал массив, содержащий истинным или ложным, чтобы знать, если выражение соответствует. Не могу ли я сделать все это в регулярном выражении, без JavaScript?
Это регулярное выражение не является рекурсивным. – Unihedron
Каков ваш ожидаемый результат? – ohaal
Результат должен быть просто логическим значением. ИСТИННО || ЛОЖНЫЙ. –