我正在尝试编写一个允许输入键盘上所有字符(甚至是空格)的正则表达式,但会限制在行尾输入逗号。我试过这样做,包括所有可能的字符,但它仍然没有给我正确的输出:
[RegularExpression("^([a-zA-Z0-9\t\n ./<>?;:\"'!@#$%^&*()[]{}_+=|\\-]+,)*[a-zA-Z0-9\t\n ./<>?;:\"'!@#$%^&*()[]{}_+=|\\-]+$", ErrorMessage = "Comma is not allowed at the end of {0} ")]
答案 0 :(得分:2)
^.*[^,]$
。*表示所有字符,不需要这么长时间
答案 1 :(得分:1)
^([a-zA-Z0-9\t\n ./<>?;:\"'!@#$%^&*()[]{}_+=|\\-]+,)*[a-zA-Z0-9\t\n ./<>?;:\"'!@#$%^&*()[]{}_+=|\\-]+(?<!,)$
^^
最后添加lookbehind
。
答案 2 :(得分:0)
一个正则表达式,允许输入键盘上的所有字符(甚至是空格),但会限制在行尾输入逗号。
请注意,您输入的内容远远超过使用键盘输入的内容。基本上,您希望在行的末尾允许任何字符但一个逗号。
所以,
(?!,).(?=\r\n|\z)
此正则表达式正在检查每个行(因为(?=\r\n|$)
前瞻),(?!,)
前瞻确保最后一个字符(我们匹配使用) .
)不是逗号。 \z
是一个明确的字符串结束锚。
请参阅regex demo
这甚至可以在客户端使用。
要获得整行匹配,您只需在模式的开头添加.*
(因为我们没有使用单行标记,.
与换行符号不匹配):
.*(?!,).(?=\r\n|\z)
或者(使用原子组或带有^
行锚点的内联多行选项加快速度,但不会在客户端工作)
(?>.*)(?!,).(?=\r\n|\z)
(?m)^.*?(?!,).(?=\r\n|\z) // The fastest of the last three
请参阅demo