在 ASP.NET 表單中,我試圖找到一種允許多個逗號分隔元素的模式,但它似乎不起作用。我需要允許 4 個字母和 2 個數字 (JEAN01) 或 2 個數字和 4 個字母 (01JEAN) 任意次數:JEAN01,JEAN02,03JEAN,JEAN04
我的第一次嘗試(見https://regex101.com/r/E4JZVv/1)是:
/^([a-z-A-Z]{4}[0-9]{2}|[a-z-A-Z]{2}[0-9]{4})(,[a-z-A-Z]{4}[0-9]{2}|[a-z-A-Z]{2}[0-9]{4})*$
我的第二次嘗試(https://regex101.com/r/HU9cOS/1)是
((^|[,])[a-z-A-Z]{4}[0-9]{2}|[a-z-A-Z]{2}[0-9]{4})
第一個只接受幾個元素。
uj5u.com熱心網友回復:
這應該夠了吧:
^((\w{4}\d{2}|\d{2}\w{4})(,|$))
請參閱:https ://regex101.com/r/8hoNXl/1
解釋:
^: 斷言字串開頭的位置\w{4}\d{2}: 4 個字母和 2 個數字\d{2}\w{4}: 2 位數字和 4 個字母(,|$): 或者,字串的結尾:重復一次到無限次(貪婪)
uj5u.com熱心網友回復:
您第一次嘗試的設定很好,只有:
- 你想匹配與
4 letters and 2 digits or 2 digits and 4 letters這部分不同的[a-z-A-Z]{2}[0-9]{4} - 在第二部分的組重復中,您必須重復逗號并將其后面的交替本身也放在一個組中,以便可以在兩個交替之前添加逗號
使用不區分大小寫的匹配:
(?i)^(?:[a-z]{4}[0-9]{2}|[0-9]{2}[a-z]{4})(?:,(?:[a-z]{4}[0-9]{2}|[0-9]{2}[a-z]{4}))*$
查看正則運算式演示。
對于您嘗試的第二種模式,字串開頭的斷言不應交替出現,否則您可以進行部分匹配,因為它也允許使用逗號。
您可以在末尾使用可選的逗號重復交替。如果您不想讓字串以逗號開頭,您可以例如使用否定的前瞻(?!,)并在斷言字串的開頭后使用交替。
(?i)^(?!,)((?:,|^)(?:[a-z]{4}[0-9]{2}|[0-9]{2}[a-z]{4})) $
查看另一個正則運算式演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432361.html
