Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用通配符进行逗号分隔名称搜索的正则表达式_Regex - Fatal编程技术网

Regex 使用通配符进行逗号分隔名称搜索的正则表达式

Regex 使用通配符进行逗号分隔名称搜索的正则表达式,regex,Regex,现在,我正在使用多个if条件来验证输入,以便使用通配符(*)按名称进行搜索。因为我有多个带有内部if语句的if,所以我尝试使用正则表达式来验证我的输入。我想在前端和后端都使用这个表达式。 如果有人能帮忙,我将不胜感激 验证规则如下所示 输入为姓氏、名,即用逗号分隔 使用通配符搜索时必须至少包含两个字符 有效的通配符仅为“*” 最多可以使用两个通配符 没有连续的通配符 如果没有通配符,则姓氏和名字中的字符长度都不受限制 一些有效输入包括: - hopkins, johns - h, j -

现在,我正在使用多个if条件来验证输入,以便使用通配符(*)按名称进行搜索。因为我有多个带有内部if语句的if,所以我尝试使用正则表达式来验证我的输入。我想在前端和后端都使用这个表达式。 如果有人能帮忙,我将不胜感激

验证规则如下所示

  • 输入为姓氏、名,即用逗号分隔
  • 使用通配符搜索时必须至少包含两个字符
  • 有效的通配符仅为“*”
  • 最多可以使用两个通配符
  • 没有连续的通配符
  • 如果没有通配符,则姓氏和名字中的字符长度都不受限制
  • 一些有效输入包括:

     - 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也是有效的,即如果没有使用通配符,则字符没有限制。我们可以在正则表达式中添加此验证吗?