Форум программистов, компьютерный форум, киберфорум
JavaScript: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/75: Рейтинг темы: голосов - 75, средняя оценка - 4.69
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086

Регулярное выражение оставить английские буквы, цифры, тире и пробелы

25.12.2016, 11:30. Показов 16154. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, нужно сделать регулярку, чтобы оставляло только англ. буквы, цифры, тире и пробелы. При этом не допускаются символы (кроме букв) в начале и конце строки. Ну и подряд несколько тире и пробелов тоже не могут идти...
Вот что пытался:
Это функция для замены кириллицы
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function sendx(from, to){
        var text = document.getElementById(from).value;
        var transl=new Array();
        transl['А']='A';     transl['а']='a';
        transl['Б']='B';     transl['б']='b';
        transl['В']='V';     transl['в']='v';
        transl['Г']='G';     transl['г']='g';
        transl['Д']='D';     transl['д']='d';
        transl['Е']='E';     transl['е']='e';
        transl['Ё']='Yo';    transl['ё']='yo';
        transl['Ж']='Zh';    transl['ж']='zh';
        transl['З']='Z';     transl['з']='z';
        transl['И']='I';     transl['и']='i';
        transl['Й']='J';     transl['й']='j';
        transl['К']='K';     transl['к']='k';
        transl['Л']='L';     transl['л']='l';
        transl['М']='M';     transl['м']='m';
        transl['Н']='N';     transl['н']='n';
        transl['О']='O';     transl['о']='o';
        transl['П']='P';     transl['п']='p';
        transl['Р']='R';     transl['р']='r';
        transl['С']='S';     transl['с']='s';
        transl['Т']='T';     transl['т']='t';
        transl['У']='U';     transl['у']='u';
        transl['Ф']='F';     transl['ф']='f';
        transl['Х']='X';     transl['х']='x';
        transl['Ц']='C';     transl['ц']='c';
        transl['Ч']='Ch';    transl['ч']='ch';
        transl['Ш']='Sh';    transl['ш']='sh';
        transl['Щ']='Shh';   transl['щ']='shh';
        transl['Ъ']='';     transl['ъ']='';
        transl['Ы']='Y\'';   transl['ы']='y';
        transl['Ь']='';      transl['ь']='';
        transl['Э']='E\'';   transl['э']='e';
        transl['Ю']='Yu';    transl['ю']='yu';
        transl['Я']='Ya';    transl['я']='ya';
        transl[' ']='-';
 
        var result='';
        for(i=0;i<text.length;i++) {
            if(transl[text[i]]!=undefined) { result+=transl[text[i]]; }
            else { result+=text[i]; }
        }
        document.getElementById(to).value = trim(result.replace(/-+/g,'-'));
    }
 
    function trim(s) {
        return s.replace(/^[0-9a-zA-Z\s\-\_]+$/);
    }
Вот это выражение вроде бы работает - удаляет несколько тире
JavaScript
1
replace(/-+/g,'-')
А вот чтобы убрать все символы кроме латиницы и тире и при этом обрезать все символы(не буквы) в начале и в конце строки не знаю как:
JavaScript
1
2
3
function trim(s) {
        return s.replace(/^[0-9a-zA-Z\s\-\_]+$/);
    }
Добавлено через 8 минут
Вроде, что-то на подобие: /[^-0-9a-zA-Z]/gim,''
А лучше помогите оптимизировать всю эту "белеберду"
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2016, 11:30
Ответы с готовыми решениями:

Регулярное выражение где только числа и английские буквы доступны
Если через регулярку только числа это будет /^\d+$/i, то как добавить ещё английские буквы?

Регулярное выражение - оставить в строке только латинские буквы
Здравствуйте. Как с помощью регулярного выражения оставить в строке только латинские буквы? Было: AbC-dЮS^17;XYZ Rt Стало: AbCdSXYZRt

Регулярное выражение, нужно оставить только заглавные буквы которые стоят по две заглавных
Регулярное выражение, нужно оставить только заглавные буквы которые стоят по две заглавных, а если одна или три то их не надо. Заглавные...

7
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
26.12.2016, 20:42
Цитата Сообщение от FloppyDisc Посмотреть сообщение
JavaScript
1
2
var transl=new Array();
* * * * transl['А']='A'
;
С какого яп пытались переписать?

Добавлено через 3 минуты
И так, давайте всё же определимся, задание у вас пиочень путанное.
Вы дали код транслитерации. То есть этот код по сути своей транслитирует буквы, это к регулярным выражениям можно отнести с большой натяжкой, а вот чтобы "буквы в начала и конце, ну и несколько тире подряд" вот тут по подробнее. Вы хотите сделать валидатор сейриников? Ну то есть чтобы только такие строки проходили: ASfasdf-Fasdffasdf-ff-asdf?
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
27.12.2016, 16:57  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
Вы дали код транслитерации. То есть этот код по сути своей транслитирует буквы, это к регулярным выражениям можно отнести с большой натяжкой
Это просто, чтобы было понятно, что тут еще кириллица еще и транслируется, ну не в этом суть.
Цитата Сообщение от BANO Посмотреть сообщение
буквы в начала и конце, ну и несколько тире подряд
Т.е, чтобы не было такого: ---pri$vet-ya-url--m$enya-zovut--_vasya-
Все лишнее(символы кроме тире (-) цифр и букв латинского алфавита было урезано, т.е:
privet-ya-url-menya-zovut-vasya
Вот, эта регулярка вроде помогла: (/[^-0-9a-zA-Z]/gim,'')
Цитата Сообщение от BANO Посмотреть сообщение
С какого яп пытались переписать?
Просто первый пример в интернете) не стал пока с эти заморачиваться, т.к работала. Наверное будет правильнее ввиде массива вот такого вида:
transl = {'А': 'A', 'Б': 'B', 'В': 'V'}
Цитата Сообщение от BANO Посмотреть сообщение
Вы хотите сделать валидатор сейриников?
Нет, это для ЧПУ URL)
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
27.12.2016, 18:24
FloppyDisc, ладно, пойдём по более стандартому пути в этом разделе. Дайтие 3 строчки входящие и 3 строчки, которые должны получится в конце.
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
27.12.2016, 18:57  [ТС]
BANO, ну если коротко, есть поле (input) "Заголовок" и поле тоже инпут "Алиас"
1.При вводе в заголовок срабатывает событие onSubmit и автоматически заполняет транслитом:
Заголовок: привет-я-ссылка
Алиас: privet-ya-ssilka
Используется та же ф-ия sendx()
2. Второй вариант - это когда алиас вводится в ручную (или изменяется отличительно от заголовка)
Т.е автоматически транслируется тоже по onSubmit
Вот парочка примеров:
Ввел: как автоматизировать производство чупа-чупса?
Вывод: kak-avtomatizirovat-proizvodstvo-chupa-chupsa

Ввел: Вам тоже бывает интересно, что творится на темной стороне луны? Я не один такой?
Вывод: vam-toje-interesno-chto=byvaet-natemnoy-storone-luni-ya-ne-odin-takoy

Ввел: Быть или не быть? Вот в чем все это ^_^ - это смайл
Вывод: bit-ili-ne-bit-vot-v-chem-vopros-eto-smilik

Ну и еще

Ввел: .:.::.Rock-end-Roll! Крутаааа!!!! -- Ааааа ---- :.:...::. //Pank
Вывод: rock-end-roll-krutaaaa-aaaaa-pank
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
27.12.2016, 20:39
Лучший ответ Сообщение было отмечено FloppyDisc как решение

Решение

FloppyDisc, ну вроде как сделал
JavaScript
1
2
3
4
5
6
7
8
9
10
function trim(str) {
  
  return str
    .replace(/[^a-z\d\-\s]/gi,'') // удаляем весь мусор, который нам нахрен не сдался
    .replace(/[\s\-]+/ig, '-') // Удаляем всё дубяжи и пробелы на "-"
    .replace(/^[^a-z\d]+/i, '') // Удаляем всё лишнее в начала
    .replace(/[^a-z\d]+$/i, '') // Удаляем всё лишнее с конца
 
}
alert(trim("---pri$vet-ya-url--m$enya-zovut--_vasya-"))
1
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
27.12.2016, 23:59  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
ну вроде как сделал
Вот это понимаю) Не то что мой говнокодик)) А на счет транслита, лучше его на клиентской стороне делать или же обращаться к php на сервер и там транслировать?
Что-то типа: событие-> сервер -> ответ -> trim(s) -> вывод;
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
02.01.2017, 15:58
FloppyDisc, на счёт транслита... Лучше использовать готовый модуль, чем писать свой велосипед.
Остальное что вы сказали, я не понял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.01.2017, 15:58
Помогаю со студенческими работами здесь

Регулярное выражение для получения цифры по бокам от буквы
Здравствуйте. Предположим, есть строчки: Мне нужно получить цифры, находящиеся справа и слева от &quot;x&quot; и саму букву в том...

Регулярное выражение не может распознать тире
Подскажите, пожалуйста! Есть строка, но никак не выдает результат положительного поиска. Почему не видит? Как быть? Вообще - желательно,...

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

Регулярное выражение (пробелы между строк)
Всем доброго времени суток, нужна ваша помощь в составлении регулярного выражения. Вот кусок html кода, из которого, нужно выдернуть инфу...

Дана символьная строка, содержащая буквы, цифры и пробелы. Написать строку задом наперед, удалив из нее все пробелы
Дана символьная строка, содержащая буквы, цифры и пробелы. Написать строку задом наперед, удалив из нее все пробелы Delphi


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru