我正在尝试另一个问题的正则表达式:Regex which accepts alphanumerics only, except for one hyphen in the middle
我将此代码作为验证用户名的一部分:
...
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
}
答案 0 :(得分: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