我目前使用此正则表达式:
^[a-zA-Z0-9&.""')#*:;<>&`=%?@\}!{(,_+-/$ \[\]\\]+$
我会接受特殊字符:
[a-zA-Z0-9éèêëËÉÈÊàâÀÂîïÎÏçÇôÔûÛùÙ&`.""')#*:;<>&=%?@\}!{(,_+-/$ \[\]\\]+
只有当用户输入了报价并再次抓取报价时,应用程序才会接受第一个正则表达式。
我们应该接受:
但我们不接受:
答案 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éèêëàâîïçôûù&`.')#*:;<>&=%?@\}!{(,_+-/$ \[\]\\]*(?:"|$))+$
请注意,我将"
替换为"|$
,因此引用的文本可以关闭,也可以在字符串末尾终止。但是,如果要确保引用的文本在完成输入文本后关闭,则仍然必须使用完整模式。