正则表达式用于验证文本框长度

4

我有一个正则表达式 (在javascript中) 用于验证输入,以确保用户未在文本框中输入超过1000个字符:

^.{0,1000}$

如果您在一行中输入文本,它可以正常工作,但是一旦您按下回车并添加新行,它就停止匹配。我应该如何更改这个正则表达式以解决这个问题?

3个回答

6
问题在于 . 不能匹配换行符。我想你可以使用类似这样的内容:
^[.\r\n]{0,1000}$

只要你不使用m, 它应该能工作,但是你真的需要在这里使用正则表达式吗?为什么不直接使用.length属性呢?

必须提及jwz的名言

有些人遇到问题时,会想“我知道,我用正则表达式来解决。”现在他们有两个问题了。


编辑:你可以使用CustomValidator来检查长度,而不是使用正则表达式。MSDN上有一个可用的示例这里


我正在使用ASP.NET正则表达式验证器。 - Andrey
@Andrey 使用适当的验证器。 - user1228
那个正则表达式不起作用。Martin建议的那个可以,所以我已经准备好了。 - Andrey
谢谢您提供有关自定义验证器的链接,但在我的情况下实现它并不容易。我在表单上有20个框,每个框都有不同的最大长度要求。 - Andrey

4

What you wish is this:

/^[\s\S]{0,1000}$/

原因是.不能匹配换行符。
然而更好的方法是不使用正则表达式,只需使用<text area element>.value.length

我相信这个正则表达式不会接受“垃圾”字符,而我想要能够接受它们。 - Andrey
它将接受所有的\s空白字符和\S非空白字符,两者加起来就是everything™。但是,再次强调,不要使用正则表达式,这样做是完全错误的。 - Martin Jespersen
你的建议很有用,谢谢!但我仍然不明白为什么它是错误的。我意识到如果我只是在JavaScript中进行比较,我应该使用string.length方式;但我确实想使用内置的asp.net正则表达式验证器而不是编写代码,而且它的性能也不错。 - Andrey
@Andrey:有一句话说:“如果你手上只有一把锤子,每个问题都会开始看起来像钉子。”仅仅因为某个工具能够足够地完成一项工作,并不意味着它就是这项工作的正确工具——确保你的工具箱里有很多工具,并选择适合手头工作的正确工具,这样你就会成为一个更好的程序员 ;) - Martin Jespersen
我同意,但我也遵循最少代码的原则 - 如果我可以使用内置工具(如asp.net中的RegularExpressionValidator类)进行验证或编写自己的工具,我会使用内置工具,并将精力集中在其他方面。我每天只有20个小时可用于编码 :) - Andrey

3

如果你只是想验证输入的长度,那么直接验证字符串的长度不是更容易吗?

if (input.length > 1000)
    // fail validation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接