[英]Regex to match optional character in any order
我需要能夠匹配以下字符串:
GQG6VJ6K
, TYTU-TIDM-56
4-5-PZ
等
連字符-
是可選的,但必須至少包含一個字母數字字符。
到目前為止,我想出的最佳嘗試是[A-Z0-9-]+
錯誤地匹配了一個連字符。
我也嘗試過(?[-]*)(?[A-Z0-9]+)
但是它不起作用(我是regex noob)。 獎勵積分說明原因。
有什么解決方案?
編輯:
@ archeong87將我引向最終解決方案: ^[A-Z0-9]+(-{0,1}[A-Z0-9]+)*$
這應該可以解決問題:
([A-Z0-9]-?)*[A-Z0-9]
使用正則表達式模式
^[A-Z0-9-]*[A-Z0-9][A-Z0-9-]*$
└───┬───┘ └───┬──┘└───┬───┘
│ │ └ alphanumeric characters or hyphens (none or any)
│ │
│ └ one alphanumeric character
│
└ alphanumeric characters or hyphens (none or any)
要么
^(?=[A-Z0-9-]*$).*[^-]
└───┬───┘ └─┬┘
│ └ non-hyphen
│
└ allowed characters
你很親密!
^(?=.*[A-Z0-9])[A-Z0-9-]+$
|| | |
|| | anchor your regex
|| |
|| what you were already doing
||
|lookahead assertion: at least 1 alphanumeric
|
anchor your regex
編輯:
在考慮如何排除時-
在開始還是結束時,我意識到有一個簡單得多的解決方案:
^[A-Z0-9]+(-[A-Z0-9]+)*$
看來@AndreKR有了這個主意,因此對他+1。
采用:
/^(?=.*[a-z\d])[a-z\d-]*$/i
i
意思是不區分大小寫,如果只需要大寫,那么
/^(?=.*[A-Z\d])[A-Z\d-]*$/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.