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

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте, нужно сделать регулярку, чтобы оставляло только англ. буквы, цифры, тире и пробелы. При этом не допускаются символы (кроме букв) в начале и конце строки. Ну и подряд несколько тире и пробелов тоже не могут идти...
Вот что пытался:
Это функция для замены кириллицы
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2016, 11:30
Ответы с готовыми решениями:

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

Регулярное выражение - оставить в строке только латинские буквы
Здравствуйте. Как с помощью регулярного выражения оставить в строке только латинские буквы? Было:...

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

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

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

Добавлено через 3 минуты
И так, давайте всё же определимся, задание у вас пиочень путанное.
Вы дали код транслитерации. То есть этот код по сути своей транслитирует буквы, это к регулярным выражениям можно отнести с большой натяжкой, а вот чтобы "буквы в начала и конце, ну и несколько тире подряд" вот тут по подробнее. Вы хотите сделать валидатор сейриников? Ну то есть чтобы только такие строки проходили: ASfasdf-Fasdffasdf-ff-asdf?
0
Особый статус
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
27.12.2016, 16:57  [ТС] 3
Цитата Сообщение от 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
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
27.12.2016, 18:24 4
FloppyDisc, ладно, пойдём по более стандартому пути в этом разделе. Дайтие 3 строчки входящие и 3 строчки, которые должны получится в конце.
0
Особый статус
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
27.12.2016, 18:57  [ТС] 5
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
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
27.12.2016, 20:39 6
Лучший ответ Сообщение было отмечено 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
Особый статус
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
27.12.2016, 23:59  [ТС] 7
Цитата Сообщение от BANO Посмотреть сообщение
ну вроде как сделал
Вот это понимаю) Не то что мой говнокодик)) А на счет транслита, лучше его на клиентской стороне делать или же обращаться к php на сервер и там транслировать?
Что-то типа: событие-> сервер -> ответ -> trim(s) -> вывод;
0
Ренегат
Эксперт HTML/CSS
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
02.01.2017, 15:58 8
FloppyDisc, на счёт транслита... Лучше использовать готовый модуль, чем писать свой велосипед.
Остальное что вы сказали, я не понял.
0
02.01.2017, 15:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2017, 15:58
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru