Member 13952925 Ответов: 3

Проверка специальных символов не работает должным образом


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

Например: Эй, Мужик! (Когда я набираю "!" в конце текста, мой код работает нормально) Эй! Человек! (Но когда я вставляю"! " где-то в середине текста после того, как весь текст набран, это не работает)

Ниже приведен мой код.

Любая помощь будет очень признательна! Спасибо!

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

$("textarea[id$=<%= TxtValue.ClientID %>]").keyup(function () {
            var txt = $(this).val();
            var regex = new RegExp('[^0-9a-zA-Z-,_.\:\s]+$');
            var vldttxt = regex.test(txt);
            if (txt.length > 0 && vldttxt === true) {
                alert("Error");
            }
            var noSpclChar = txt.replace(regex, "");
            this.value = noSpclChar;
        });

3 Ответов

Рейтинг:
22

OriginalGriff

Теоретически, "Эй, парень!" и "Эй! Человек!" должны быть признаны оба, потому что они оба заканчиваются восклицательным знаком. Действительно, когда я проверяю с Экспрессо[^] или с онлайн-тестером регулярных выражений JS они оба сопоставляются без проблем.
- Эй! Man" с другой стороны, не будет, потому что ваша строка регулярного выражения специально требует специального символа в качестве конечного символа в строке.

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


Member 13952925

Ты-тот самый человек! Теперь это работает. Сейчас, я смотрю проблемы то есть. когда я набираю что-то посередине, мой код работает нормально, но курсор перемещается в конец текста. Это происходит потому, что я делаю сброс текста, используя его свойство .value. Любая идея, чтобы курсор оставался прямо там, когда я набираю специальный символ в середине. Спасибо!

OriginalGriff

Вероятно, это связано с тем, что вы устанавливаете свойство Text текстового поля внутри обработчика событий TextChanged, который автоматически перемещает каретку (техническое название точки ввода вертикальной полосы) в конец текста.
Если вы хотите, чтобы курсор не перемещался, сохраните свойство SelectionStart перед установкой текста и восстановите его после этого. Не вините меня, я этого не писал! :смеяться:

Member 13952925

Это отличная идея! Но как мне это сделать? Я имею в виду, что я совсем не знаком со свойством SelectionStart. Не могли бы вы мне помочь?

OriginalGriff

Так что смотрите в документации!
Это не сложно, просто google "C# TextBox.SelectionStart" и перейдите по ссылке на MS Docs.

Рейтинг:
16

Richard MacCutchan

Знак доллара означает найти в конце исходных данных. Видеть В JavaScript Регулярные Выражения Справочник[^].


Member 13952925

Спасибо за мгновенный ответ. Это работает. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что, поскольку я выполняю сброс текста с помощью его свойства .value, когда я набираю специальный символ в середине, курсор перемещается в конец текста. Есть ли какой-нибудь другой способ, когда курсор остается прямо там, когда я набираю специальный символ в середине?

Richard MacCutchan

Извините, я не знаю jQuery.

Рейтинг:
0

Patrice T

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


Member 13952925

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