簡體   English   中英

這個正則表達式怎么寫?

[英]how to write this regular expression?

一個 20 - 24 字符長的字母數字字符串,沒有空格和符號,至少有 2 位數字

AAAAAAAAAAAAAAAAAAAA - not valid
AAAAAA0AAAAAAAAA0AAA - valid
AAAAAA01AAAAAAAAA0AAA - valid
AAAAAA0AAAAAAAAA0AAA@ - not valid

我認為這只有通過前瞻斷言才有可能:

^(?=[a-zA-Z\d]{20,24}$)[a-zA-Z]*\d[a-zA-Z]*\d[a-zA-Z\d]*$

前瞻斷言( (?=[a-zA-Z\d]{20,24}$) )檢查字符串是否具有預期的形式(20-24 個字母數字字符)。 第二部分( [a-zA-Z]*\d[a-zA-Z]*\d[a-zA-Z\d]* )檢查它是否包含至少兩位數字。

我認為這是最簡單的模式:首先進行肯定的前瞻以檢查是否至少有兩位數字,然后匹配 20-24 個字母數字字符:

^(?=.*\d.*\d)[A-Za-z\d]{20,24}$

我要抽象一點,因為這聽起來像是作業(如果是,請這樣標記)。

  • 您可以使用{ min , max }限制模式匹配的次數
  • 您可以限制哪些字符與[ charlist ]匹配
  • 您可以使用所謂的零寬度正向前瞻來施加額外的限制(還有一種否定形式)。 語法各不相同,因此請查看適合您環境的文檔。

如果您需要更多幫助,請更新您的問題(和標簽)。

Gumbo 對需求有正確的表述。

它可以縮短,但他的更清晰,可能比短版本更快。

var rX=/^(?=[a-zA-Z\d]{20,24}$)([a-zA-Z]*\d){2,}/

在 JS 中(對 C# 語法不夠自信):

if (str.length >= 20 && str.length <= 24 && /([a-z]*[0-9]){2}[a-z0-9]*/i.test(str)) {
  // match found
}

基本上與 Gumbo 相同的想法只是更短一點:

^(?=[\w\d]{20,24}$)[\w]*\d[\w]*\d[\w\d]*$

暫無
暫無

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

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