我正在努力撰寫符合以下要求的正則運算式:
- 最多 20 個字符(英文字母和數字)
- 可能有一個可選的破折號 ( - ) 但不能以它開頭或結尾
我可以想出這個模式:^[a-zA-Z0-9-]{0,20}$但是這個模式允許多個破折號,并且可以在輸入字串的開頭/結尾輸入破折號。
uj5u.com熱心網友回復:
您可以使用
^(?=.{0,20}$)(?:[a-zA-Z0-9] (?:-[a-zA-Z0-9] )?)?$
請參閱正則運算式演示。
詳情:
^- 字串的開始(?=.{0,20}$)- 字串中允許零到二十個字符(?:- 非捕獲組開始:[a-zA-Z0-9]- 一個或多個字母數字字符(?:-[a-zA-Z0-9] )?-- a和一個或多個字母數字字符的可選序列
)?- 非捕獲組的結束,重復一或零次(即模式匹配是可選的)$- 字串結束。
uj5u.com熱心網友回復:
試一試:
^(?:[^\W_]{1,20}|(?!.{22})[^\W_] -[^\W_] )$
查看在線演示
^- 起跑線錨;(?:- 打開非捕獲組;[^\W_]{1,20}- 匹配 1-20 個字母數字字符;|- 或者;(?!.{22})[^\W_] -[^\W_]- 斷言位置的負前瞻后不跟 22 個字符,接下來我們在連字符之間匹配 1 個字母數字字符;
)$- 在匹配結束線錨之前關閉非捕獲組。
請注意,以上假設最多 20 個字母數字字符,但帶有一個可選連字符,這將使最大計數達到 21 個字符。
uj5u.com熱心網友回復:
您可以匹配兩個不同的正則運算式并將兩個正則運算式放在 OR 中:
第一個正則運算式是匹配的:
- 最多 20 個字符(不允許破折號)
^\w{1,20}
第二個正則運算式是匹配:
- 一個字符開始(沒有破折號)
- 可選最多 18 個字符或破折號
- 最后一個字符(無破折號)
^\w[\w-]{1,18}\w$
完整的解決方案:
^\w{0,20}$|^\w[\w-]{0,18}\w$
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/526423.html
標籤:迅速正则表达式
下一篇:如何修復此通用約束錯誤?
