2013-08-21 142 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