【问题标题】:Regex to limit string length for strings with new line characters正则表达式限制具有换行符的字符串的字符串长度
【发布时间】:2010-12-09 14:34:28
【问题描述】:

看起来像一个简单的任务 - 得到一个正则表达式来测试特定长度的字符串: ^.{1,500}$

但是如果一个字符串有“\r\n”,那么上面的匹配总是失败!

正确的正则表达式应该如何接受换行符作为字符串的一部分?

我有一个 <asp:TextBox TextMode="Multiline"> 并使用 RegularExpressionValidator 来检查用户输入内容的长度。

谢谢你, 安德烈

【问题讨论】:

    标签: asp.net regex validation


    【解决方案1】:

    您可以在验证输入时使用RegexOptions.Singleline 选项。这会将输入视为单行语句,并对其进行解析。

    否则你可以试试下面的表达式:

    ^(.|\s){1,500}$
    

    这应该适用于多行输入。

    【讨论】:

    • 你能用大括号代替右括号吗?否则它工作,谢谢!
    • 赞成,但那些使用它进行验证的人应该小心,从技术上讲,这可以用 500 [ENTER] 绕过。
    【解决方案2】:

    你能在检查字符串长度之前去掉换行符吗?在验证服务器端时,这很容易做到。 (在 .net 中,您可以为此使用自定义验证器)

    不过,从用户体验的角度来看,我也会实现一个客户端“字符计数器”。有很多东西可以找到。 jQuery 有几个选项。然后您可以实现自定义验证器以仅在服务器端运行,然后使用字符计数器作为您的客户端验证。让用户更好地看到他们在打字时留下了多少个字符。

    【讨论】:

    • 我正在使用 asp.net 的 RegularExpressionValidator,它使用提供的正则表达式进行客户端和服务器端验证
    • 我的建议是只使用正则表达式的服务器端(关闭该控件的客户端),因为这实际上只是用于验证进入数据库的数据。客户端,而不是事后验证它,我建议使用实时“字符计数器”,因为从用户体验的角度来看,它是一个更好的指标。这只有在您已经在使用 jQuery 或其他东西时才有意义,因为它很容易添加。如果没有,也许只为这一领域不值得。
    • er,让我重新表述一下...如果 REGEX 仍然存在问题,请使用自定义控件验证服务器端。您可以在服务器端轻松检查字符串长度而忘记正则表达式。然后在客户端使用javascript实时计数字符的方法。
    【解决方案3】:

    无法设置 RegexOptions 让你在这里搞砸了。由于这是在 RegularExpressionValidator 中,您可以尝试在正则表达式本身中设置选项。

    我认为这应该可行:

    (?s)^.{1,500}$
    

    (?s) 部分打开 Singleline 选项,这将允许点匹配每个字符,包括换行符。对于它的价值,the article here also lists the other RegexOptions 和将它们设置为内联语句所需的符号。

    【讨论】:

    • 此表达式在客户端验证中中断 - Javascript 无法理解 (?s)
    • 啊,是的,Javascript 验证。对此感到抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2019-09-24
    • 2021-03-21
    相关资源
    最近更新 更多