2015-10-11 17 views
0

Я пытаюсь написать простую RegExp, который проверки имени пользователя:тестов Регулярного выражения не работают должным образом

function _validateLogin(login) { 
    //This should allow for [a-zA-Z0-9_] as well as '.' and '@' 
    //Spaces are not allowed 
    var re = /[\w\[email protected]]+/; 
    return re.test(login); 
} 

Но по какой-то причине она возвращает true даже если я дам его 'aa aa'. Что я делаю неправильно?

ответ

1

Изменить ваше регулярное выражение на ^[\[email protected]]+$ чтобы соответствовать всей строке. I случай aa aa он вернет true, так как aa будет соответствовать. Поэтому используйте ^ в начале для позиции утверждения в начале строки и $ в конце для позиции утверждения в конце строки. Также нет необходимости в побеге ., так как точка не имеет специального значения внутри класса символов.

function _validateLogin(login) { 
 
    //This should allow for [a-zA-z0-9_] as well as '.' and '@' 
 
    //Spaces are not allowed 
 
    var re = /^[\[email protected]]+$/; 
 
    return re.test(login); 
 
} 
 

 
console.log(_validateLogin('aa aa')); 
 
console.log(_validateLogin('aaaa'));

1

Вы не закрепляя регулярное выражение. Он вернет true для любой строки, которая содержит букву, цифру, подчеркивание, точку или знак в любом месте.

Fix: var re = /^[\[email protected]]+$/;

Смежные вопросы