2015-07-09 2 views
-1

Я пытаюсь проверить адрес электронной почты и с помощью регулярных выражений вроде:JS RegExp выпуск

\b[a-z0-9._][email protected][a-z0-9.-]+\.[a-z]+\b/i 

тесты на regexr.com сказать, что он работает, как задумано, но когда я пытаюсь сделать, как это:

var a = new RegExp("\b[a-z0-9._][email protected][a-z0-9.-]+\.[a-z]+\b/i"); 
console.log(a.test("[email protected]")); 

Я получаю false. Что я делаю не так? Является ли это регулярное выражение неправильным или, может быть, существует некоторая проблема из-за его построения с помощью конструктора или чего-то еще?

ответ

0

При использовании конструктора RegExp вы делаете , а не, включают флагов и косые черты в строке. Вам также необходимо избегать любых обратных косых черт, так как применяются обычные правила escape-последовательности.

var a = new RegExp("\\b[a-z0-9._][email protected][a-z0-9.-]+\\.[a-z]+\\b", 'i'); 
 
document.write('<pre>' + a.test("[email protected]") + '</pre>');

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

var a = /\b[a-z0-9._][email protected][a-z0-9.-]+\.[a-z]+\b/i; 
 
document.write('<pre>' + a.test("[email protected]") + '</pre>');

+0

Я забыл подчеркнуть, да, идея заключается в том, чтобы создать регулярное выражение динамически из строки. Как я могу заставить его работать таким образом? –

+0

Если вы создаете динамический шаблон, который необходимо обновить во время выполнения, а не в eval time, вы можете использовать конструктор 'RegExp'. Но, как указано выше, вы ** не ** включаете в себя косые черты и флагов в строке. –

+0

Это не сработает, потому что вам нужны двойные обратные черточки. –