2015-05-15 2 views
3

У меня есть небольшой яваскрипт funtcion:RegEx Javascript не соответствует правильно

function GetFilteredListLimited(event) { 
    var $source = $(event.target); 
    var $Pattern = event.data.Pattern; 
    var RE = new RegExp($Pattern, 'i'); 
    if (RE.test($source.val())) { 
     console.log('RegEx match'); 
    } 
}; 

Шаблон используется:

^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$ 

которые должны соответствовать самым электронной почте-адреса.

Использование http://regexpal.com/ Я вижу, что шаблон правильный. Но по какой-то странной причине сценарий уже совпадает с 4-м символом после @

abc @ abcd не должен давать соответствия, но он делает. Любые предложения?

+0

Это не дает никакого совпадения. см. https://regex101.com/r/jM4xJ3/2 –

+4

Похоже, что виновником является нотация конструктора. Попробуйте выполнить двойное экранирование '.', чтобы оно выглядело как'^[A-Z0-9 ._% + -] + @ [A-Z0-9 .-] + \\. [AZ] {2,4} $ '. –

+0

Это письмо действительно. 'a @ com' - действительный адрес электронной почты. Согласно спецификации, верхние имена доменов разрешены в качестве имени домена в электронном письме. (Подождите, пока кто-то сделает TDN 'abcd', и вы увидите такие сайты, как' example.abcd'). Но моя ставка заключается в том, что вы выбрали «Инвертировать результаты» в параметрах на этом веб-сайте. Он отлично работает на https://regex101.com/r/jF7bU7/1 –

ответ

1

Вы должны знать о конструкторе RegExp, где экранированные символы должны иметь двойное экранирование. Итак, ваша регулярное выражение строка передается в конструктор RegExp должна выглядеть следующим образом:

^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,4}$ 

Исправление может быть введена так:

var RE = new RegExp($Pattern.replace(/\\/g, '\\\\'), 'i'); 

Это будет работать, если символы эвакуации используются последовательно.

+0

Помогает ли вам или вам нужна помощь? –

+0

Двойной побег. сделал это. – BrilBroeder