繁体   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