2014-12-01 150 views
-1

现在我正在使用多个条件来通过名称使用通配符(*)来验证输入的有效性。由于我有多个“如果”与内部“if”语句我试图使用正则表达式来验证我的输入。我想在前端和后端都使用这个表达式。 欣赏有人能帮忙。用逗号分隔的名字搜索的正则表达式

验证规则是遵循

  1. 输入是姓,名,即由逗号分隔。
  2. 使用通配符搜索时,必须至少有两个字符。
  3. 有效通配符仅为'*'。
  4. 最多可以使用两个通配符。
  5. 没有连续的通配符。
  6. 如果没有通配符对最后和名字中的字符长度没有限制。

一些有效的输入是:

- hopkins, johns 
- h, j 
- ho*, jp* 
- *ins, johns 
- *op*, john* 

一些无效的输入是:

- hopkins johns 
- h*, johns 
- hop**, joh* 
- h*pk*n* 

如果正则表达式不会是复杂的,我们可以认为这是有效的,否则它OK可以认为这是无效的

- ho*in*, jo* 

总之通用名称格式为

[*]XX[*], [*]XX[*] 
where [] ==> Optional 
     X ==> A-Z, a-z 
     XX ==> length 2 or more if wild card used 

回答

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

你可以使用这个表达式

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

的上述正则表达式做验证之前,只是做一些喜欢用正则表达式/\*/g匹配*数量,并确保它的长度为0至2

+0

如H刚刚意识到输入,J也是有效的,即如果没有使用通配符有性格上没有限制。我们可以在正则表达式中添加此验证吗? – 2014-12-01 16:59:22

相关问题