在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