簡體   English   中英

JavaScript中的正則表達式(regex)

[英]Regular expression (regex) in JavaScript

我需要一個可以根據以下條件驗證字符串的正則表達式。

  • 以逐字文字ROLE_開頭。
  • 只允許使用大寫字母和破折號的組合。
  • 其中必須至少包含6個字符,最多包含20個字符。
  • 不允許兩個或多個連續的下划線。
  • 前導和/或結尾的下划線是不允許的。
  • 文本ROLE_ADMIN是不允許的。

因此,以下正則表達式可在Java中使用。

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

但是在JavaScript中,像ROLE_ADMIN_sROLE_ADMIN_s的結尾處的s )之類的字符串被視為實際上不應該是的有效字符串。 允許的最大字符數(20)也未正確驗證。

我正在使用match()函數,

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

Java的matches方法期望該模式匹配整個字符串,而JavaScript的match方法則是查找任何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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM