2014-12-01 76 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

相關問題