2015-07-01 179 views
1

我有以下的正則表達式:不允許特定特殊字符的正則表達式

[\u00BF-\u1FFF\u2C00-\uD7FF\w \&quot;"",.()/-<br\s/?>]+$ 

它允許任何語言的字符,除了特殊字符,如#,*等(雖然有些特殊字符被允許,你可以在正則表達式上面看到)。

但是,我的正則表達式還允許不需要的特殊字符,如<,>,&

我該如何修改這個正則表達式來禁止輸入字符串中的這些字符?

+0

在接受字符的列表中有這些字符。如何不讓他們在那裏?看起來你可能會誤解你的正則表達式實際上意味着在那裏用「"」來表示,並且看起來像一個br標籤。 – Chris

+0

@ Chris..yes ...這些字符來自我在正則表達式中指定的範圍,但這是問題,我應該如何修改正則表達式來排除這些字符? –

+0

請查看https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx#character_classes以獲取有關如何使用字符類構造的信息。它匹配任何字符,所以一個更好的字符會是'[\ u00BF- \ u1FFF \ u2C00- \ uD7FF \ w \「;」「,。()/ - br \ s /?] + $'這是相同的作爲你的,但刪除'<', '>'和'&'。我沒有進一步研究爲什麼它可能無法工作,所以我不保證這會解決您的問題。 – Chris

回答

4

您需要使用交替對一些正則表達式部分(<br\s/?>被視爲獨立的字符<b等),並/-<創造了一系列接受許多比你更光想:

enter image description here

因此,我建議使用

^(?:[\u00BF-\u1FFF\u2C00-\uD7FF\w ",.()/:;-]|&quot;|<br\s?/?>)+$ 

在C#中,使用逐字字符串:

@"^(?:[\u00BF-\u1FFF\u2C00-\uD7FF\w "",.()/:;-]|&quot;|<br\s?/?>)+$" 

demo on regexstorm

我假設你需要匹配任何3 「實體」 或它們的組合:

  • [\u00BF-\u1FFF\u2C00-\uD7FF\w ",.()/-] - 人物\u00BF-\u1FFF\u2C00-\uD7FF\w,空間的範圍,雙引號,,,.,(,), /和文字連字符
  • &quot; - 一個文字&quot;
  • <br\s?/?> - <br>標籤(可以匹配<br><br/><br />)。

^ and $將在開始和結束時強制匹配。

+0

感謝您的回答...我認爲這應該工作...我正在測試它.....;) –

+0

我認爲你也可以從'&'在'"'中刪除'&','&'不是正則表達式的特殊字符。 –

+0

是的..它的工作,但正則表達式中間的'''是打破正則表達式我應該如何解決這個問題,我想允許':'和';' –