我想知道是否可以使用正則運算式檢查以下約束:“必須至少 5 個字符,其中 4 個應該是字母”
我知道如何設定Must be at least 5 characters約束,但不確定of which 4 should be letters是否可以使用正則運算式。
uj5u.com熱心網友回復:
對的,這是可能的。請使用以下正則運算式。
(?=.{5,})\w*[a-z]\w*[a-z]\w*[a-z]\w*[a-z]\w*
解釋
(?=Lookahead assertion - 斷言以下正則運算式匹配.任何字符{5,}不少于5次重復
)關閉前瞻\w*[a-z]\w*[a-z]\w*[a-z]\w*[a-z]\w*以任意順序從a到z的靜態字母
注意:(?=.{5,})斷言字串匹配 5 個或更多字符
uj5u.com熱心網友回復:
您也可以使用此模式:
(?i)(?=.*[a-z].*[a-z].*[a-z].*[a-z].*).{5,}
在這里,肯定的前瞻(?=.*[a-z].*[a-z].*[a-z].*[a-z].*)斷言必須有四個字母(大小寫不發揮給定的作用(?i))直接或間接地相互跟隨。一旦滿足該條件,正則運算式匹配任何長度至少為 5 個字符的字串
uj5u.com熱心網友回復:
您使用什么語言或工具?
這聽起來像是不需要單個正則運算式的事情之一。
這里是“至少四個字母”
[a-z].*[a-z].*[a-z].*[a-z]
這是“至少五個字符”
.{5,}
甚至,如果您使用的是 PHP 之類的語言,請完全避免使用正則運算式并更加明確:
length($str) >= 5
uj5u.com熱心網友回復:
你甚至可以在沒有前瞻的情況下做到這一點!考慮以下正則運算式:
(. [a-z].*[a-z].*[a-z].*[a-z].*)|(.*[a-z]. [a-z].*[a-z].*[a-z].*)|(.*[a-z].*[a-z].*[a-z]. [a-z].*)|(.*[a-z].*[a-z].*[a-z]. [a-z].*)|(.*[a-z].*[a-z].*[a-z].*[a-z]. )
根據您的引擎,您可能必須使用^and來錨定它$。
世代:簡單地將 量詞一直移動:四個字母是必須的,但第五個字母可以在任何位置。
如果可能,您應該避免為此使用 RegEx,或者將檢查是否存在四個字母 ( .*[a-z].*[a-z].*[a-z].*[a-z].*) 的 RegEx 與簡單的長度檢查結合使用。
如果您需要正好 5 個字符作為字母,請替換.為[^a-z].
如果您可以使用常規語法,則可以寫得更短:
S →
%aA |.S'
S' →%aA' |.S'
A →%aB |.A'
A' →%aB' |.A'
B →%aC |.B'
B' →%aC |.B'
C →%aD |.C'
C' →%aD' |.C'
D →.D'
D' →ε
哪里S是開始符號,.代表任何字符和%a任何字母。需要五個狀態來跟蹤已讀取的字符數;每個狀態 X 還需要一個狀態 X' 來跟蹤是否已經讀取了非字母字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483118.html
標籤:正则表达式
