在Nodejs中使用正则expression式停止stream

我正在尝试从另一个问题的正则expression式:正则expression式只接受字母数字,除了在中间的一个连字符

我有这个代码作为我的用户名validation的一部分:

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

但是如果用户名无效,stream程停止在这里,并且不会继续过去。 我需要能够问:

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

str.match(regex)的问题是,如果找不到匹配项,它将返回null ,请考虑这一点:

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

null读取.length会抛出一个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