2016-05-25 4 views
1

Я экспериментировал с регулярным выражением другого вопроса: Regex which accepts alphanumerics only, except for one hyphen in the middleИспользование регулярных выражений в Nodejs остановки потока

У меня есть этот код как часть моей проверки имени пользователя:

... 
var re = /^(?:[a-z0-9]{6,20}|(?=.{10,21}$)[a-z0-9]+-[a-z0-9]+)$/i; 
var found = username.match(re).length; 
... 

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

if(username fails regex) { 
    send error back to client 
} 
+1

Является ли это обработчик проверки? Не должно ли это прозрачно выполнять эту работу? Или, если match() возвращает true, else false. – sln

+0

Да, это обработчик проверки – tommyd456

+0

Я не уверен, как построить условие с помощью регулярного выражения. Если кто-то добавит ответ, я могу от него уйти. – tommyd456

ответ

1

Проблема str.match(regex) в том, что он будет возвращать null, если совпадение не найдено, считают это:

console.log('hello'.match(/world/)); // null 

И чтение .length из null выбросит TypeError ,

Вы должны попробовать использовать regex.test(str), который возвращает логическое значение:

var re = /^(?:[a-z0-9]{6,20}|(?=.{10,21}$)[a-z0-9]+-[a-z0-9]+)$/i; 
var found = re.test(username); // true or false 
Смежные вопросы