簡體   English   中英

如何在 REGEX 表達式中多次只允許一個特殊字符

[英]How to allow only one special character multiple times in a REGEX expression

我正在嘗試創建一個 REGEX 表達式,它只允許字母數字字符和一個可以多次使用的特殊字符。 可以包含的特殊字符是()-_,.$ 例如:
abc_def 有效
abc-def 有效
abc--def 有效
abc_-def 無效

我試圖弄清楚並想出了這個: [a-zA-Z0-9]*[\\-_().,\\$]?[a-zA-Z0-9]*但這只允許出現一次的特殊字符(所以 abc--def 不會像我想要的那樣有效)。 但如果我改變? *然后可以在字符串中包含多個不同的特殊字符(因此 abc-_def 將是有效的,但我不希望它是)。 我嘗試了其他一些東西,例如: [[a-zA-Z0-9\\-]*[a-zA-Z0-9_]*...] (我的想法是這將讀作( alphanumeric && '-') || (alphanumeric && '_') ||... ) 但我找不到任何可行的方法。

還值得注意的是: abc-def-ghi-jkl-mno 應該是有效的,因此[alphanumeric][specialcharacters][alphanumeric]形式的任何內容都不起作用。 此外,字符串可以以特殊字符開頭和結尾。

是否可以創建一個可以按照我想要的方式工作的 REGEX 表達式? 還是我堅持自己寫 function? 謝謝:)

PS 我在 Validators.pattern() 中使用它來控制 angular 9 中的表單,以防萬一

^[a-zA-Z0-9]*([\(\)-_,\.\$])(?:\1*[a-zA-Z0-9]*)*$|^[a-zA-Z0-9]+$會做你的工作

正則表達式演示

細節:

^[a-zA-Z0-9]*([\(\)-_,\.\$]) :匹配任何字符,直到看到第一個特殊字符,將其放入第 1 組

(?:\1*[a-zA-Z0-9]*)*$ :匹配模式,從組 1 的特殊字符開始,然后是正常字符,盡可能多,直到字符串結尾

^[a-zA-Z0-9]+$ :用於沒有特殊字符的特殊情況,例如abc

\1稱為back-reference ,它將是最后匹配的組鏈接以了解更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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