簡體   English   中英

正則表達式創建允許,不允許幾個字符

[英]Regex creation to allow, disallow few characters

我是正則表達式的新手,我有這個用例:

  1. 允許字符、數字。
  2. 允許零個或一個問號。 (? - 有效,不允許連續問號 (??))。

測試有效

? 測試 - 有效

??test-無效

?test?test - 有效

???測試無效

測試?測試 - 無效

  1. 排除 $ 符號。

[a-zA-Z0-9?] - 似乎這不起作用

謝謝。

試試下面的正則表達式:
^(?!.*\\?\\?)[a-zA-Z0-9?]+$

  1. 首先,我們使用Negetive lookahead - 這允許我們排除任何后跟雙問號的字符( Negetive lookahaed不消耗字符)

  2. 由於問號在正則表達式中具有特殊含義( Quantifier — 匹配零次和一次),因此每個問號都使用反斜杠進行轉義。

  3. 最后的加號是一個Quantifier ——匹配一次和無限次,盡可能多次

你可以在這里測試

您的描述可以分解為正則表達式:

^(?:\??[a-zA-Z0-9])+\??$

您說的是字符,而您的描述僅顯示字母和數字,但可以使用\\w (單詞字符)來代替 - 這包括下划線

它在^$之間意味着整個字段必須匹配(沒有部分匹配,但如果你想要那些你可以刪除它。 +意味着必須至少有一個匹配(所以空字符串不會匹配)。捕獲組( (\\??[a-zA-Z0-9]) ) 說我必須看到一個問號后跟字母或只是字母重復多次,最后一個問號允許字符串以單個問號結尾。

你可能不想在這里捕獲組,所以我們可以從?:開始,以防止捕獲導致:

^(?:\??[a-zA-Z0-9])+\??$

火柴

test  
?test  
?test?test  
test?

不匹配

??test
???test
test??test
test??
<empty string>
?

暫無
暫無

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

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