簡體   English   中英

正則表達式以任意順序匹配可選字符

[英]Regex to match optional character in any order

我需要能夠匹配以下字符串:

GQG6VJ6KTYTU-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.

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