 
			
				03.03.2015, 03:38
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 26.02.2015 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Разница между литеральной формой и объектом RegExp
			 
			
		
		
		
		
	
 
	| 
		 Код: 
	 | 
 
	var $eMail = 'blah-blah9@blah-blah-blah9.blahblahblah';
alert(($eMail.match(/^[-_a-z0-9\.]+@(?:[-_a-z0-9]+(?=\.)\.)+[a-z]{2,6}$/i)) === null);/ Выводит true
var $reg = new RegExp('^[-_a-z0-9\.]+@(?:[-_a-z0-9]+(?=\.)\.)+[a-z]{2,6}$', 'i');
alert(($eMail.match($reg) === null);/ Выводит false | 
 
	
 
 
Регулярки в обоих случаях одинаковые, в документации везде пишут, что случай №1 - это сокращенная форма, а №2 - полная. Но работают, судя по всему, по разному. 
Почему так? Может кто подскажет? 
Ушатал из-за этой непонятной разницы целые сутки. Переписывал регулярку по разному (думал, что неправильно пишу регулярку), экспериментировал (с объектом RegExp) и никак не мог понять почему не работает, пока не переписал в виде литерала и все заработало.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.03.2015, 04:11
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 new RegExp('^[-_a-z0-9\\.]+@(?:[-_a-z0-9]+(?=\\.)\\.)+[a-z]{2,6}$', 'i') 
 
В конструкторе new RegExp обратные слеши надо экранировать. 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось laimas, 03.03.2015 в 04:14.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.03.2015, 05:52
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2010 
					
					
					
						Сообщений: 8,804
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от laimas
			
		
	 | 
 
	| 
		 В конструкторе new RegExp обратные слеши надо экранировать.
	 | 
 
	
 
 Конструктор тут не причем. Дело в строках.
 
Чтобы сформировать в памяти строку abc\cde в исходном коде js нужно записать ее как 'abc\\cde'
 
<input
    onchange="alert(new RegExp(dataset.pattern, 'i').test(value))"
    data-pattern="^[-_a-z0-9\.]+@(?:[-_a-z0-9]+(?=\.)\.)+[a-z]{2,6}$"
    value="blah-blah9@blah-blah-blah9."
/>
<form action="javascript:'ok'">
    <input type="email" required />
    <button type="submit">Попытаться отправить</button>
</form>
 
		
	
		
		
		
		
		
			
				__________________ 
				В личку только с интересными предложениями   
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.03.2015, 05:57
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Получается, что нужно проверять входное значение и при необходимости экранировать? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.03.2015, 06:33
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2010 
					
					
					
						Сообщений: 8,804
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 laimas, в примере у меня email не дописан, поэтому выдает false. 
 
Я просто показал, что строка может быть записана не в js-коде, а в html-коде, а по правилам html слэш не является спецсимволом. То есть дело не в конструкторе RegExp, а в правилах синтаксиса языка, на котором записывается строка. 
		
	
		
		
		
		
		
			
				__________________ 
				В личку только с интересными предложениями   
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.03.2015, 06:36
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Ну тогда понятно. 
 
PS. danik.js ты же здесь дано обитаешь, должен быть в курсе. В общем попал я здесь на страницу, на которой описано форматирование сообщения - добавление [JS run], еще чего-то там... Была открыта эта страница, но Лиса подвисла и пришлось ее насильно отключить, последнее открытое не сохранилось. Все пытаюсь найти опять эту страницу форума и безуспешно, даже не представляю как на нее попал раньше. ) Дай ссылку на нее, пожалуйста. 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось laimas, 03.03.2015 в 07:19.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.03.2015, 08:44
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2010 
					
					
					
						Сообщений: 8,804
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Пожалуйста, отформатируйте свой код! 
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
 
[js]
... ваш код...
[/js]
 
О том, как вставить в сообщение  исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте  http://javascript.ru/formatting.  
		
	
		
		
		
		
		
			
				__________________ 
				В личку только с интересными предложениями   
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.03.2015, 09:09
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Благодарю, оно самое. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.03.2015, 11:50
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 26.02.2015 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 ОК, спасибо. Дело в том, что в статье о регулярках не встречал этой тонкости. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |