当多行文本粘贴到文本输入正则表达式与空格不匹配时

时间:2015-11-13 13:43:29

标签: c# .net regex text typography

当用户粘贴这样的东西时(例如来自记事本):

multi
line@email.com

进入输入文本框,换行符消失,它看起来像这样:

多 line@email.com

但无论转换为换行符与此正则表达式不匹配: ' \ S | \ T | \ r | \ N | \ 0''我' 所以这个无效字符通过js验证传递给我正在处理的.NET应用程序代码。 有趣的是,这个文本编辑器做了相同的转换,这就是为什么我必须将原始样本作为代码发布。我想知道换行符是什么,所以我可以为正则表达式添加一个文字,但我不知道如何。非常感谢!

以下是整个片段:

var invalidChars = new RegExp('(^[.])|[<]|[>]|[(]|[)]|[\]|[,]|[;]|[:]|([.])[.]|\s|\t|\r|\n|\0', 'i');

if (text.match(invalidChars)) {
       return false;
}

2 个答案:

答案 0 :(得分:1)

您的立即问题正在逃避。您正在使用字符串文字来创建正则表达式,如下所示:

'(^[.])|[<]|[>]|[(]|[)]|[\]|[,]|[;]|[:]|([.])[.]|\s|\t|\r|\n|\0'

但在它到达RegExp构造函数之前,[\]变为[]; \s变为s; \0变为0;并且\t\r\n将转换为它们所代表的字符(分别为制表符,回车符和换行符)。如果您使用正则表达式文字而不会发生这种情况,但您仍然必须转义反斜杠以匹配文字反斜杠。

你的正则表达式也有更多括号而不是它需要。我认为这就是你想要的:

/^\.|\.\.|[<>()\\,;:\s]/

匹配开头的点,两个连续点,或几个禁止字符之一,包括任何空白字符(\s匹配任何空格字符,而不仅仅是空格。)< / p>

答案 1 :(得分:0)

好的 - 这是

  

vbCrLF

这是粘贴的换行符转换为的内容。我添加了(vbCrLF)组,现在检测到这些空格。谢谢,Dan1M

http://forums.asp.net/t/1183613.aspx?Multiline+Textbox+Input+not+showing+line+breaks+in+Repeater+Control