正则表达式在双引号之间接受特殊的法语字符

时间:2013-08-21 19:24:02

标签: .net regex

我目前使用此正则表达式:

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

我会接受特殊字符:

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

只有当用户输入了报价并再次抓取报价时,应用程序才会接受第一个正则表达式。

我们应该接受:

  • 你好“été”ddd
  • “été”hello
  • “ETE”
  • 你好

但我们不接受:

  • ETE
  • éte“aaa”
  • “aaa”été

1 个答案:

答案 0 :(得分:1)

这样的东西?

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

这将匹配引号中包含的第一组字符(基本拉丁字母,数字各种符号)或第二组字符(法语字母等)的序列。您可以使用案例IgnoreCase选项简化此操作:

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

您可以对其进行测试here


更新您希望表达式与部分输入相匹配,例如应接受hello "é。一般来说这是非常困难的,我通常建议使用两种模式 - 一种用于验证完整输入,另一种用于验证部分输入。

为了支持部分输入我会使用它:

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

请注意,我将"替换为"|$,因此引用的文本可以关闭,也可以在字符串末尾终止。但是,如果要确保引用的文本在完成输入文本后关闭,​​则仍然必须使用完整模式。