2013-08-21 137 views
2

之間特殊的法國角色,我目前使用這個表達式:正則表達式接受雙引號

^[a-zA-Z0-9&.""')#*:;<>&`=%[email protected]\}!{(,_+-/$ \[\]\\]+$ 

而且我會接受特殊字符:

[a-zA-Z0-9éèêëËÉÈÊàâÀÂîïÎÏçÇôÔûÛùÙ&`.""')#*:;<>&=%[email protected]\}!{(,_+-/$ \[\]\\]+ 

只有當用戶輸入了報價,當它將再次抓住報價,應用程序將接受第一個正則表達式。

我們應該接受:

  • 你好 「ETE」 DDD
  • 「ETE」 你好
  • 「ETE」
  • 你好

但我們不接受:

  • ETE
  • ETE 「AAA」
  • 「AAA」 ETE

回答

1

像這樣的事情?

^(?:[a-zA-Z0-9&.')#*:;<>&`=%[email protected]\}!{(,_+-/$ \[\]\\]+|"[a-zA-Z0-9éèêëËÉÈÊàâÀÂîïÎÏçÇôÔûÛùÙ&`.')#*:;<>&=%[email protected]\}!{(,_+-/$ \[\]\\]+")+$ 

這將匹配任何第一字符集(基本拉丁語字母,數字各種符號)或包含在引號中的第二字符集合的一個序列(法國字母等)。您可以使用的情況下IgnoreCase選項簡化了這個有點:

^(?:[a-z0-9&.')#*:;<>&`=%[email protected]\}!{(,_+-/$ \[\]\\]+|"[a-z0-9éèêëàâîïçôûù&`.')#*:;<>&=%[email protected]\}!{(,_+-/$ \[\]\\]+")+$ 

您可以測試它here


更新似乎要,將匹配部分輸入,例如一個表達應該接受hello "é。一般來說,這是非常困難的,我通常會推薦使用兩個模式—一個用於驗證完整輸入,另一個用於驗證部分輸入。

爲了支持部分輸入我會使用這樣的:

^(?:[a-z0-9&.')#*:;<>&`=%[email protected]\}!{(,_+-/$ \[\]\\]*|"[a-z0-9éèêëàâîïçôûù&`.')#*:;<>&=%[email protected]\}!{(,_+-/$ \[\]\\]*(?:"|$))+$ 

注意,我用"|$替換後",因此它可以在引用文字既可以通過的結束時關閉,或終止串。但是,如果您想要確保引用的文本在完成輸入文本後關閉,​​則仍需使用完整模式。

+0

你的正則表達式幾乎完美的工作。 我使用此正則表達式驗證每個用戶,並且我KeyPress不接受無效值。 您的正則表達式接受一切正常。除了我輸入報價時她拒絕的文字需要 例如:「你好」(不工作) 我改成這個: ^(?i)(?:[a-z0-9&。')# * :; <>&'=%?@ \}!{(,_ + -/$ \ [\] \\] + |「|」[a-z0-9éèêëàâîïçôûù&'。')#* :; <>&=%?@ \}!{(,_ +/$ \ [\] \\] + |「[a-z0-9éèêëàâîïçôûù&'。')#* :; <>&=%?@ \}!{(,_ + -/$ \ [\] \\ ] +「)+ $ 但不是我的正則表達式在第一個引號出現後接受所有字符 例如:hello」été「eté 但是你好」été「支持工作。 – Jam

+0

@ user2704902看我的更新。 –

+0

非常感謝,它非常棒!據我個人所知,爲什麼用「*」替換「+」字符? – Jam