【问题标题】:Domain name validation regex - how to expand into multiline validation?域名验证正则表达式 - 如何扩展到多行验证?
【发布时间】:2012-06-22 21:59:01
【问题描述】:

这是我目前的情况;我是一个近乎完全的正则表达式文盲,我的任务是扩展我们网站的一部分,该网站向用户请求域名以获得客户帐户。现在它是一行,一个域名,下面的正则表达式效果很好。

(?i)^(?!.{257,})(?!.*-\\.)(?!.*?-\\.)(?:[a-zA-Z0-9-]{1,64}\\.)+(?:[a-zA-Z]{2,6})\\b

我需要做的是允许用户在框中输入多个域名。每行一个。基本上我需要做的就是包装这个正则表达式,以便逐行应用验证,而不是在整个集合上。

我知道这件事使用消极的前瞻性,尽管我不知道这些是什么。我发现的每个教程似乎都避开了我需要的想法和概念。我本周末可以学习的任何想法、链接或 cmets 将不胜感激。

顺便说一句,我在 .Net MVC 3.0 中实现这个。

谢谢!

【问题讨论】:

  • 似乎最简单的做法是将域列表从每一行拆分为一个列表,然后在每个域上单独运行现有的正则表达式。这样,如果其中一个无效,您可以告诉他们第 XX 行的域无效,而如果您试图在一个巨大的列表中进行该操作,您将无法轻易判断它失败的位置。
  • 这就是我最终所做的,效果很好。此外,由于我改变了看待它的方式,我的 UI 设计看起来和工作得非常完美。

标签: c# regex asp.net-mvc asp.net-mvc-3 validation


【解决方案1】:

许多正则表达式框架提供了一组扩展选项来修改匹配的整体行为。

以下两个链接包含对 .NET 和 Javascript 的引用:

在这两种情况下,如果将整个多行字符串输入正则表达式,m 选项可能就是您要查找的选项。

此外,就负面预测而言,Python regexp 模块中的这个小 sn-p 给出了一个简洁的示例(来自 Python Regex Module):

(?!...)

如果 ... 下一个不匹配则匹配。这是一个否定的前瞻断言。例如,Isaac (?!Asimov) 将匹配 'Isaac ',除非它后面没有 'Asimov'。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多