【问题标题】:.Net Multiline Regex expression to restrict to integers.Net 多行正则表达式限制为整数
【发布时间】:2017-07-27 03:26:29
【问题描述】:

我遇到了一个非常简单的正则表达式的问题。

我想将多行文本框中的条目限制为整数。我的正则表达式在单行模式下工作正常(对于单行文本框,不使用多行选项),但在多行模式下允许字母字符潜入,但只有在输入新行后才可以。

我的代码(C#)类似于:

Regex regExpr = new Regex("^(\d*)$", RegexOptions.Multiline)
return regExpr.IsMatch(testString);

我希望以下示例有效:

1

1\\n

1\\n2\\n3

我希望以下内容无效

A

A1\\n2

1\\n2\\nA3

提前致谢。

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    你可以匹配数字和换行符:

    Regex regExpr = new Regex("[\d\n]*", RegexOptions.Multiline)
    

    这将匹配任意数量的数字和换行符。如果您只想确保输入的文本没有非数字,请使用

    Regex regExpr = new Regex("[\D\S]", RegexOptions.Multiline)
    

    如果匹配,那么你有一个非法条目。

    【讨论】:

    • 嗨,安德鲁,恐怕这些都不能达到我想要达到的效果。第一个允许“A1\n2\n3”通过,第二个不允许有效的“1\n2\n3”通过。我更希望它是肯定匹配而不是“不匹配”,因为我的问题详细说明了我需要的部分内容,在某些情况下,正则表达式是不同的(例如验证十进制条目或 IP 地址条目)。
    • 第一个正则表达式试图捕获文本框的数字和换行符部分。如果您想确保只接受有效输入,请执行以下操作:将 RegexOptions 更改为 RegexOptions.Singleline 并将正则表达式更改为 "^[\d\n]*$" ,如您在示例中所示。这将一次解析整个字符串,并且 ^ 和 $ 将匹配字符串的开头和结尾。
    • 感谢 Andrew 和 Nicolas 的建议,我通过删除 RegexOptions.Multiline 解决了这个问题,而是用 "(" ... ""\n? )*"。所以整数表达式变成了 "^((\d*)\n?)*$" 并且看起来很完美。
    • Singleline 修饰符改变了.(点)元字符的行为,允许它匹配换行符以及所有其他字符。 Multiline 影响锚点,^$,除了在文本开头和结尾匹配的默认行为外,还允许它们在行边界处匹配。 Singleline 对锚点没有影响,Multiline 对点没有影响;他们是完全独立的。
    【解决方案2】:

    怎么样

    (\d?\\n*)?
    

    【讨论】:

    • 这似乎并没有限制我的输入。是否缺少开始和结束标记?
    • 你是对的,对不起我的错误。试试这个:^(\\d+\\n*)+$
    • 不幸的是,这并不能解决问题。它匹配“A1\n2\n3”,这与我的原始表达式相同。我认为这个问题在很大程度上是一个多线问题。我对正则表达式一点经验都没有,但我的理论是,因为上面的一行是有效的,所以有一个匹配。
    • 我刚刚在没有 RegexOptions.Multiline 的情况下尝试过,我认为它可以工作。我会做更多检查,看看我是否可以实施完整的解决方案。
    • 感谢 Andrew 和 Nicolas 的建议,我通过删除 RegexOptions.Multiline 解决了这个问题,而是用 "(" ... ""\n? )*"。所以整数表达式变成了 "^((\d*)\n?)*$" 并且看起来很完美。
    【解决方案3】:

    您想破坏性地删除 alpha 还是只是将其发回以供用户重新输入信息?

    要删除,只需使用空结果进行搜索替换。

    [^\d\n]

    要检查是否有除数字以外的任何内容,\n 仅在页面提交并发送回用户的第一次出现错误时执行相同的操作。

    由于我不知道您使用的是哪种 .Net 语言,我只能给出一般原则。

    【讨论】:

    • 我在 WPF 应用程序中使用 C#。我只想返回 IsMatch 调用的结果。我已经相应地编辑了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多