逗号分隔名称搜索的正则表达式与通配符

时间:2014-12-01 16:26:59

标签: regex

现在我正在使用多个if条件来通过名称和通配符(*)来验证搜索输入。因为我有多个' if'内心的'如果'语句我试图使用正则表达式来验证我的输入。我想在前端和后端都使用这个表达式。 感谢是否有人可以提供帮助。

验证规则如下

  1. 输入是姓氏,名字,即以逗号分隔。
  2. 使用通配符搜索时必须至少有两个字符。
  3. 有效的通配符是' *'仅
  4. 最多可以使用两个通配符。
  5. 没有连续的外卡。
  6. 如果没有外卡,则对姓氏和名字的字符长度都没有约束。
  7. 一些有效的输入是:

     - 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
    

2 个答案:

答案 0 :(得分:0)

您可以使用此正则表达式

\*?[a-zA-Z]{2,}\*?, \*?[a-zA-Z]{2,}\*?

在使用上述正则表达式进行验证之前,只需执行类似*与正则表达式/\*/g的匹配的操作,并确保其长度介于0到2之间。

答案 1 :(得分:0)

在@Amit_Joki回答的帮助下,我编写了以下代码并且工作正常。

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");
  }       
}