2

我目前使用这个正则表达式:

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

我会接受特殊字符:

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

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

我们应该接受:

  • 你好“été”ddd
  • “été”你好
  • “埃特”
  • 你好

但我们不接受:

  • 埃特
  • éte "aaa"
  • "aaa" 吃货
4

1 回答 1

1

像这样的东西?

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

这将匹配任何第一组字符(基本拉丁字母、数字各种符号)或括在引号中的第二组字符(法语字母等)序列。IgnoreCase您可以使用 case选项稍微简化一下:

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

你可以在这里测试它。


更新看起来你想要一个匹配部分输入的表达式,例如hello "é应该被接受。一般来说,这很难做到,我通常建议使用两种模式——一种用于验证完整输入,另一种用于验证部分输入。

为了支持部分输入,我会使用这个:

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

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

于 2013-08-21T19:29:26.120 回答