Regex 使用通配符进行逗号分隔名称搜索的正则表达式
现在,我正在使用多个if条件来验证输入,以便使用通配符(*)按名称进行搜索。因为我有多个带有内部if语句的if,所以我尝试使用正则表达式来验证我的输入。我想在前端和后端都使用这个表达式。 如果有人能帮忙,我将不胜感激 验证规则如下所示Regex 使用通配符进行逗号分隔名称搜索的正则表达式,regex,Regex,现在,我正在使用多个if条件来验证输入,以便使用通配符(*)按名称进行搜索。因为我有多个带有内部if语句的if,所以我尝试使用正则表达式来验证我的输入。我想在前端和后端都使用这个表达式。 如果有人能帮忙,我将不胜感激 验证规则如下所示 输入为姓氏、名,即用逗号分隔 使用通配符搜索时必须至少包含两个字符 有效的通配符仅为“*” 最多可以使用两个通配符 没有连续的通配符 如果没有通配符,则姓氏和名字中的字符长度都不受限制 一些有效输入包括: - hopkins, johns - h, j -
- hopkins, johns
- h, j
- ho*, jp*
- *ins, johns
- *op*, john*
- hopkins johns
- h*, johns
- hop**, joh*
- h*pk*n*
一些无效输入包括:
- hopkins, johns
- h, j
- ho*, jp*
- *ins, johns
- *op*, john*
- hopkins johns
- h*, johns
- hop**, joh*
- h*pk*n*
如果正则表达式不复杂,我们可以认为这是有效的,否则可以认为这是无效的
- ho*in*, jo*
简而言之,通用名称格式是
[*]XX[*], [*]XX[*]
where [] ==> Optional
X ==> A-Z, a-z
XX ==> length 2 or more if wild card used
你可以使用这个正则表达式
\*?[a-zA-Z]{2,}\*?, \*?[a-zA-Z]{2,}\*?
在对上述正则表达式进行验证之前,只需将
*
的数量与正则表达式/\*/g
匹配,并确保其长度在0到2之间。在@Amit\u Joki answer的帮助下,我编写了以下代码,并且工作正常
var nameArray = [...];
var re = /\*?[a-zA-Z]{2,}\*?, \*?[a-zA-Z]{2,}\*?/;
for (var i = 0; i < nameArray.length; i++) {
if(nameArray[i].indexOf(',') < 0 ||
(nameArray[i].indexOf('*') >= 0 && !re.test(nameArray[i]))) {
console.log(nameArray[i] + ": Invalid");
} else {
console.log(nameArray[i] + ": Valid");
}
}
var nameArray=[…];
变量re=/\*?[a-zA-Z]{2,}\*?,\*?[a-zA-Z]{2,}\*?/;
对于(var i=0;i=0&!re.test(nameArray[i])){
log(nameArray[i]+“:无效”);
}否则{
log(nameArray[i]+“:Valid”);
}
}
刚刚实现的输入,如h,j也是有效的,即如果没有使用通配符,则字符没有限制。我们可以在正则表达式中添加此验证吗?