Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Помогите экранировать регулярку


Автор: shtormIK 26.6.2012, 11:59
Уже мозг кипит, не понимаю, что не так. Помогите разобраться пожалуйста.
вот к примеру такой код работает, шаблон подходит.
Код

rmask1 = /^(?:\d|\+|-){0,3}$/;
if (rmask1.test(-56)){alert('OK');}
else{alert(rmask1)}

Но мне нужно вставить в него переменную, значит надо задавать паттерн в другом виде... экранируем всё и вся
Код

rmask1 = new RegExp('\^\(\?:\\d\|\\\+\|-\){0,3}\$');
if (rmask1.test(-56)){alert('OK');}
else{alert(rmask1)}


... шаблон не подходит ... что-то не так.

Автор: baldina 26.6.2012, 12:51
Код

rmask1 = new RegExp('^(?:\\d|\\+|-){0,3}$');

Автор: shtormIK 26.6.2012, 13:04
baldina,  не... ругается javascript invalid quantifier
И экранировать вроде бы как все спецсимволы надо ?
Специальные символы
( ) — круглые скобки;
[ ] — квадратные скобки;
\ — обраный слеш;
. — точка;
^ — степень;
$ — знак доллара;
| — вертикальная черта;
? — вопросительный знак;
+ — плюс.

Автор: Evghenusi 26.6.2012, 14:30
shtormIK, что регулярка должна делать?

Цитата(shtormIK @  26.6.2012,  11:59 Найти цитируемый пост)
экранируем всё и вся
 не в обиду будет сказанно 
Цитата
Научи дурака молиться он и лоб расшибет

Код
var rmask1 = new RegExp('^(?:\\d|\\+|-){0,3}$');
 работает, хотя что должна проверять так и не понял

Добавлено через 1 минуту и 26 секунд
хм, baldina тоже самое предложил  smile , у меня тоже работает

Автор: Aliance 26.6.2012, 14:54
А чем рабочий вариант не устраивает?

Автор: Evghenusi 26.6.2012, 14:59
Цитата(Aliance @  26.6.2012,  14:54 Найти цитируемый пост)
А чем рабочий вариант не устраивает? 


Цитата(shtormIK @  26.6.2012,  11:59 Найти цитируемый пост)
Но мне нужно вставить в него переменную


Автор: shtormIK 26.6.2012, 16:07
Ну вообще, насчёт экранирования http://a-panov.ru/2011/11/использование-переменных-в-регулярн/
 а маска должна быть типа ###.99 или 999.9
 где # это либо число, либо знак + либо знак - либо ничего
 9 это число, либо ничего
 количество решёток или девяток в маске может быть и другим. 
 Я делал пока просто для ### где кол-во решёток 3

Автор: Aliance 26.6.2012, 17:01
Evghenusi, вы сомневаетесь в моих способностях читать? Вопрос зачем? Ведь в приведённом примере по факту это не переменная, а константа. Если же регулярка задается, скажем, вводом пользователя/выборкой из БД или аналогичные варианты - тогда понятно, а иначе смысла не вижу делать через объект.

Автор: Evghenusi 26.6.2012, 17:38
Код

var rmask1 = new RegExp('^(-|\\+)?\\d+\\.\\d$');
shtormIK, сойдёт или я что-то упустил?


Цитата(Aliance @  26.6.2012,  17:01 Найти цитируемый пост)
сомневаетесь в моих способностях читать?
нисколько, я усомнился в вашей внимательности, вы же не электронное устройство, будь вы им, я бы не усомнился  smile .

Цитата(Aliance @  26.6.2012,  17:01 Найти цитируемый пост)
Ведь в приведённом примере по факту это не переменная, а константа.
если это относится ко мне, то к несчатью я не вижу там ни переменных, ни констант, видимо сказываются пробелы в моих знаниях.

Я вначале думал переменная будет вписываться в регулярку, например: new RegExp('^'+var+'$');
но ...

Автор: shtormIK 27.6.2012, 10:10
Evghenusi
ну я как сделать хотел ... разбивал маску типа ###.99 на 2 части - до точки и после, проверял в левой решётка или девятка (в правой всегда 9) и считал длину обеих частей.
Потом строил шаблон через регулярку. А переменная нужна чтоб ограничить именно кол-во симоволо в левой или правой части от точки
Вы правильно думали насчёт переменной
что-то типа такого должно было получится:

Код

var rmask1 = new RegExp('^(-|\\+)?\\d+{0,'+leftlength+'}\\.\\d{0,'+rightlength+'}$');


Автор: shtormIK 27.6.2012, 11:56
До меня наверное дошло, почему у меня фаербаг выдаёт ошибку invalid quantifier...
забыл упомянуть одну деталь ... проект делаю в RADPHP XE2, будь он неладен ... он весь код перекомпилирует, преобразует. Из-за этого видимо и проблема

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)