【问题标题】:Regex for multiples of 1010 倍数的正则表达式
【发布时间】:2013-08-27 22:10:34
【问题描述】:

我不确定这是否可以通过正则表达式单独编辑来实现。我需要在我的 MVC 视图中验证 10 的倍数的整数字段值。这是否可以通过单独的正则表达式和不显眼的验证来实现?

【问题讨论】:

  • [0-9]*0 之类的有什么问题?
  • @DavidSchwartz 有时答案就在你面前,而且很简单 :)
  • 为什么不用模块? 5%10 != 0 和 50%10 == 0 儿子 10 的任何倍数总是有模块 0

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


【解决方案1】:

这样的模式应该可以工作:

^[0-9]*0$

当然这将允许0。如果你想确保输入大于或等于 10,你可以使用这个:

^[1-9][0-9]*0$

但是,这不会处理以不同数字系统表示的数字(例如 10,我认为 Eastern Arabic numerals 中的数字是 10)。最好创建一个custom validation attribute 来测试输入的值。一个简单的实现看起来有点像这样:

public class MultipleOf10Attribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        return ((int)value) % 10 == 0;
    }
}

【讨论】:

    【解决方案2】:

    嗯。我的理解是 10 的倍数以 0 结尾。总是。 (至少十进制。)那么怎么样

    ^.*0$
    

    或者如果你想确保它们都是小数:

    ^\d*0$
    

    简单,除非我遗漏了什么。

    根据 cmets,匹配负数:

    ^-?\d*0$
    

    如需更通用(且完全无用)的方法,请查看:Check number divisibility with regular expressions

    还有一个很酷的检查素数的方法,又没用here

    【讨论】:

    • asdasdas0 匹配该正则表达式
    • 这将不匹配负数。
    • @Blorgbeard,感谢您的提示——我认为“整数字段”意味着所有输入都是整数。
    • @rogaos 实际上你可能是对的,但让正则表达式更清晰并没有什么坏处 :)
    【解决方案3】:

    是的,你可以这样做,这是 10 倍数的正则表达式

    ^\d*\d?((10)|(0))\.?((0)|(00))?$
    

    【讨论】:

    • 这似乎是一种复杂的方法...... OP也说“整数字段”,你似乎允许小数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2011-09-23
    • 1970-01-01
    相关资源
    最近更新 更多