Как определить, какой символ разрешен в текущем регулярном выражении с помощью JavaScript? - PullRequest
0 голосов
/ 13 мая 2010

В моем веб-приложении я создаю некую инфраструктуру, которая используется для привязки данных модели для управления на странице. Каждое свойство модели имеет некоторое правило, например длину строки, а не нуль и регулярное выражение. Перед отправкой страницы фреймворк проверяет любой связанный элемент управления с определенными правилами.

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

"^[0-9]+$" allow only digit characters like 1, 2, 3.
"^[a-zA-Z_][a-zA-Z_\-0-9]+$" allow only a-z, - and _ characters

Однако эта функция не должна заботиться о группировке, позиционировании разрешенного символа. Это только говорит о возможных персонажах.

У вас есть идеи по созданию этой функции?

PS. Я знаю, что легко создать указанную функцию, например, числовую, для разрешения только цифр. Но мне нужно совместно использовать / повторно использовать один и тот же кусок кода как на уровне данных (содержит все средства проверки модели), так и на уровне пользовательского интерфейса без каких-либо изменений.

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 мая 2010

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

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

Возможным способом продвижения вперед было бы сравнение сначала с ^pattern$, а в случае неудачи - с ^pattern без конечной привязки. Это, скорее всего, даст вам какое-то совпадение левой части строки, чтобы вы могли посчитать, сколько символов было в совпадении, и сказать, что следующий символ был «недействительным». Для более сложных регулярных выражений это будет вводить в заблуждение, но, безусловно, будет работать для простых случаев, таких как [a-zA-Z0-9_]+.

0 голосов
/ 13 мая 2010

Должен признать, что я изо всех сил пытаюсь разобрать ваш вопрос.

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

Например, ^[A-Za-z0-9]+$ допускает только строки, состоящие из букв от A до Z (верхнего и нижнего регистра) и чисел, в любом порядке и любой длины.

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