powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Зависание при проверке на соответствие регулярному выражению
14 сообщений из 14, страница 1 из 1
Зависание при проверке на соответствие регулярному выражению
    #35171653
I_Work
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю небольшую проверку:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
function check()
{
	var reg = /^(( )?[а-яА-Я]+(\.)?)+$/;
	var str = 'инженер программист группы разработки и поддержки интернет приложений';

	if (!reg.test(str)) alert('bad');
	else alert('ok');
}
document.onclick = check;
Проблема в том, что, если в строке str будут дефисы, то выполнение скрипта занимает тем больше времени, чем ближе к концу строки встречается этот дефис. Со строкой
Код: plaintext
str = 'инженер программист группы разработки и поддержки интернет-приложений';
браузер (как IE, так и FireFox) просто виснет...
Думал, проблема в выражении. Проверил на PHP - работает мгновенно даже с большими текстами...

Понятно, что JS-проверка помедленнее будет, но не настолько же, чтобы браузер просто повисал...

Может проблема в другом?.. Если кто знает, поделитесь мыслями, пожалуйста...
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35171659
I_Work
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Варианты решения типа "если пользователь ввел всякую хрень, то и пусть зависнет - сам виноват" не интересуют... :)
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35173324
mrJust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте составить анализ строки по другому. Если Вам необходимо парсить каждое слово в строке, попробуйте разбить строку на слова и парсить каждое по-отдельности.
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35173601
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<HTML>
<SCRIPT>

var reg = /^(( )?[а-яА-Я]+(\.)?)+$/;
    var str = 'инженер программист группы разработки и поддержки интернет приложений';

alert(reg.test(str) ? 'ok' : 'bad')

</SCRIPT>
</HTML>

Вот такой файл нормально отрабатвает. Можете выложить файл, который виснет?
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35173860
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял условие

/^([а-яА-Я]|\s)+(\.)?$/

или точнее

/^[а-яА-Я] ([а-яА-Я]|\s)+ (\.)?$/

Что означает в начале у Вас ( )? - не понял
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35177313
I_Work
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<HTML>
<SCRIPT>

var reg = /^(( )?[а-яА-Я]+(\.)?)+$/;
    var str = 'инженер программист группы разработки и поддержки интернет приложений';

alert(reg.test(str) ? 'ok' : 'bad')

</SCRIPT>
</HTML>


Вот такой файл нормально отрабатвает. Можете выложить файл, который виснет?

Это действительно отрабатывает нормально. А вот, если добавить дефис, то начинаются тормоза...
Такая конструкция (дефис недалеко от начала строки) работает уже заметно дольше (секунды):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<HTML>
<SCRIPT>

var reg = /^(( )?[а-яА-Я]+(\.)?)+$/;
    var str = 'инженер программист группы-разработкии поддержки интернет приложений';

alert(reg.test(str) ? 'ok' : 'bad')

</SCRIPT>
</HTML>
Если же дефис поставить где-нибудь после "разработки", то все умирает окончательно...
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35177314
I_Work
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
/^(( )?[а-яА-Я]+(\.)?)+$/

apapacyЧто означает в начале у Вас ( )? - не понял

По сути это означает пробел между "словами". Весь остальной "кусок" - проверка на правльное слово с возможной точкой в конце.

Изначально задача - проверить на корректность ввода русских ФИО пользователя.
Иванов Иван Иванович, Иванов И. И. и т.п.
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35177376
I_Work
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrJustПопробуйте составить анализ строки по другому. Если Вам необходимо парсить каждое слово в строке, попробуйте разбить строку на слова и парсить каждое по-отдельности.Уже делаю анализ по-другому, но покоя не дает вопрос о том, что ж это браузеры так обрабатывают регулярные выражения... То же самое на PHP делается практически мгновенно даже на больших текстах...
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35179088
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такое РВ работает нормальн

/^[А-Яа-я]+( [А-Яа-я]+)*\.?$/
-----------------| здесь пробел
В Вашем варианте, я думаю, циклит конструкция +$.
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35179095
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения. Не учел случая Фамилия И. О.. Вот так

/^(( ?[А-Яа-я]+\.?)*)$/

А циклит и начальный ^ и конечный $ - поэтому появились дополнительные скобочки.
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35179097
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз, не * , а +

/^(( ?[А-Яа-я]+\.?)+)$/
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35181432
I_Work
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, спасибо, новое выражение сочинил.

Проблема просто в том, почему же браузеры на этом зависают... Ведь, в принципе-то, все должно работать... Более того, Перл и ПХП отрабатывают это на "УРА"...
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35181436
I_Work
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мое новое выражение
Код: plaintext
/^(\s*([а-яА-Я]+\.?\s*)+\s*)$/

Я уже успел даже обрадоваться разок, но потом заметил - дефисы все убрал...

apapacy, Ваше выражение тоже зависает, если в конце стро есть слова с дефисами.
Например: инженер программист группы разработки и поддержки интернет-приложений
Код: plaintext
1.
2.
3.
4.
5.
6.
<HTML>
<SCRIPT>
var reg = /^(( ?[А-Яа-я]+\.?)+)$/;
var str = 'инженер программист группы разработки и поддержки интернет-приложений';
alert(reg.test(str) ? 'ok' : 'bad')
</SCRIPT>
</HTML>
...
Рейтинг: 0 / 0
Зависание при проверке на соответствие регулярному выражению
    #35183609
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри. Вернулся к своему предпоследнему варианту и чуть подправил. Проверил под Фоксом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<HTML>
<SCRIPT>
var reg = /^[А-Яа-я]+( [А-Яа-я]+\.?)*$/
var str = 'инженер программист группы разработки и. поддержки интернеприложений';
document.write(reg.test(str) ? 'ok' : 'bad')
</SCRIPT>
</HTML>
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Зависание при проверке на соответствие регулярному выражению
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]