2013-05-05 216 views
0

我需要一個正則表達式來驗證以下條件中的字符串。JavaScript中的正則表達式(正則表達式)

  • 從逐字文本ROLE_開始。
  • 只允許使用大寫字母和不帶符號的組合。
  • 必須有最少6個,最多20個字符。
  • 不允許連續兩個下劃線。
  • 不允許引導和/或拖尾下劃線。
  • 文本ROLE_ADMIN不允許使用。

因此,在Java中的正則表達式如下工作。

(?!.*__.*)(?!^ROLE_ADMIN$)(?!.*_$)(ROLE_[A-Z_]{1,15}) 

但在JavaScript中,像ROLE_ADMIN_s一個字符串(s在小的情況下結束)被視爲一個有效的字符串,不應該實際上是。最大允許字符(20)也未被正確驗證。

我使用的match()功能類似,

if($("#txtAuthority").val().match("(?!.*__.*)(?!^ROLE_ADMIN$)(?!.*_$)(ROLE_[A-Z_]{1,15})")) 
{ 
    //... 
} 
+2

您需要添加''^到開始和'$'到最後。另外,這不是你的問題,因爲瀏覽器在這種情況下自動處理它,但是你應該在'/ myexpression /'中包裝正則表達式而不是''myexpression'': – Dave 2013-05-05 16:18:34

+0

:-)我從js移動到java時遇到了相反的麻煩 - 添加'。*'在開始和結束時... – anishsane 2013-05-05 16:22:58

回答

1

Java的matches方法預計模式整個字符串匹配,而JavaScript的match方法是相當一個找到任何匹配方法,因爲它足夠了模式被發現在字符串內的某處。

"ROLE_ADMIN_s".match(/(?!.*__.*)(?!^ROLE_ADMIN$)(?!.*_$)(ROLE_[A-Z_]{1,15})/)[0] === "ROLE_ADMIN_" 

如果你想JavaScript的match要像Java的matches,使用錨的開始(^)和結束($)的字符串:

/^(?!.*__.*)(?!^ROLE_ADMIN$)(?!.*_$)(ROLE_[A-Z_]{1,15})$/ 

這將無法在你的字符串:

"ROLE_ADMIN_s".match(/^(?!.*__.*)(?!^ROLE_ADMIN$)(?!.*_$)(ROLE_[A-Z_]{1,15})$/) === null 
+0

'/^(?!.*__.*)(?!^ROLE_ADMIN$)(?!.*_$)(ROLE_[A-Z_]{1,15 })$ /'在有效的字符串(如'ROLE_ADMIN_S')上計算爲false。 – Tiny 2013-05-05 16:28:15

+0

當我從'^(?!。* __。*)(?!^ ROLE_ADMIN $)(?!。* _ $)(ROLE_ [A-1])這樣的表達式兩邊刪除正斜槓'/' Z _] {1,15})$'。我不明白。 – Tiny 2013-05-05 16:35:58

+0

@Tiny在JavaScript中,['RegExp'對象都有一個文本語法是'/ /'](https://developer.mozilla.org/en/docs/JavaScript/Reference/Global_Objects/RegExp)。當然,如果將這些文字用作字符串,即「/ /」,分隔符「/」也被視爲模式的一部分。 – Gumbo 2013-05-05 16:53:31

相關問題