2015-11-13 49 views
0

当用户粘贴这样的事情(从记事本为例):当多行文本粘贴到文本输入正则表达式不匹配的空间

multi 
[email protected] 

成输入文本框,换行符自败,它看起来像这样:

[email protected]

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

这里是整个片段:

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

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

我认为正确的正则表达式是'/^\。| [<>()\\;::\ s \ x00] |(\。)./ g'。看[这个演示](http://jsfiddle.net/9k54pteh/2/)。 –

回答

1

立即问题逃逸。您正在使用一个字符串创建正则表达式,像这样:

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

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

你的正则表达式也有更多的方括号比它需要。我想这是你想要的:

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

那起初相匹配的点,连续两个点,或几种禁止的字符,包括任何空白字符(\s比赛任何空白字符,一个不只是空间)。