c#-正则表达式十进制范围表达式.负值到正值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-正则表达式十进制范围表达式.负值到正值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3370字,纯文字阅读大概需要5分钟。
内容图文
![c#-正则表达式十进制范围表达式.负值到正值](/upload/InfoBanner/zyjiaocheng/683/31343c69185b41398dce55d7c6a0771e.jpg)
我正在尝试制作一个正则表达式,以验证应该在-12.0到13.0范围内的字段(十进制).
我能够执行此正则表达式^ [-]?(?:[0-9] | [0-1] [0-2](?:[.] [0-9])?)$,但不是足够,因为这将允许-12.9到12.9的值,并且不会验证0或0.0之类的值.
我知道这不是最好的解决方案,更好的方法是使用模型并使用数据注释添加正则表达式验证.
这里的主要问题是Model.Value是一个字符串.但是在更新数据库值之前,我需要以许多不同的方式验证该字符串.我验证字符串的方法是使用外键,该外键将告诉我要使用的正则表达式.
想象一下这个模型.
型号A
public virtual int Id{ get; set; }
public virtual IList<ModelB> ModelB{ get; set; }
B型
public virtual string Value { get; set; }
public virtual DataType DataType{ get; set; }
在DataType中,我具有该特定值的正则表达式验证
这就是为什么我使用这种方法的原因…
有人可以帮我做到这一点吗?
感谢你的帮助.
解决方法:
因为您正在执行Web客户端验证,所以不能使用Decimal.Parse()(或更好的Decimal.TryParse()),但是数据注释已经具有所需的功能.假设您在ViewModel中具有此属性:
public class MyModel {
[RegularExpression("^[-+]?(?:[0-9]|[0-1][0-2](?:[.][0-9])?)$")]
public decimal Value { get; set; }
}
是的,您可以修复此正则表达式,但是它们不是处理数值范围验证的最佳工具,表达式将很快变得非常复杂,并且通常来说,要适应不断变化的需求并不容易(如果需要验证,该(- 100 .. 1000.3]?)如果正则表达式确实是您真正需要的(而不仅仅是您想使用的东西),则使用AdrianHHH’s answer(并且不要忘记为小数点分隔符包括用户的语言环境处理),如果不是(以及关于您的假设)环境有效),然后使用以下命令:
public class MyModel {
[Range(typeof(decimal), "-12", "13")]
public decimal Value { get; set; }
}
就这样.请注意,如果您使用双精度而不是十进制,则可以将其进一步简化为[Range(-12.0,13.0)].有关详细信息,请参见MSDN.
编辑:根据您的编辑,您的方案会有些复杂,但是我仍然建议不要滥用正则表达式,因此,正确的方法(数据注释)仍然是可行的解决方案.首先,让我们创建一个自定义验证类:
[AttributeUsage(AttributeTargets.Property)]
public class ComplexLogicAttribute: ValidationAttribute, IClientValidatable
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var model = (MyModel)validationContext.ObjectInstance;
if (IsValueValidForGivenObject(model, Convert.ToString(value)))
return ValidationResult.Success;
// Or your own error message...
return new ValidationResult(FormatErrorMessage(null));
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var modelClientValidationRule = new ModelClientValidationRule
{
ValidationType = "complexlogic",
ErrorMessage = ErrorMessage
};
return new List<ModelClientValidationRule> { modelClientValidationRule };
}
}
IsValueValidForGivenObject()骨架在哪里:
private bool IsValueValidForGivenObject(MyModel model, string value)
{
decimal minimum = CalculateMinimumAccordingToVeryComplexLogic(model);
decimal maximum = CalculateMaximumAccordingToMagic(model);
decimal number;
if (!Decimal.TryParse(value, out number))
return false;
if (number < minimum || number > maximum)
return false;
return PerformEvenMoreComplexEsotericValidation(model, number);
}
现在,您必须提供客户端验证(比方说在ComplexLogic.js中,别忘了包含它):
$.validator.addMethod("complexlogic", function (value, element, params) {
// Repeat your validation logic here!
return true;
});
$.validator.unobtrusive.adapters.add("complexlogic", function (options) {
options.messages["complexlogic"] = options.message;
});
请看一下this simple tutorial,以获得更好的解释.就是这样,您将数字验证为数字,并且代码足够灵活…
内容总结
以上是互联网集市为您收集整理的c#-正则表达式十进制范围表达式.负值到正值全部内容,希望文章能够帮你解决c#-正则表达式十进制范围表达式.负值到正值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。