繁体   English   中英

禁止在文本框中输入无效字符列表的自定义验证属性

[英]Custom Validation Attribute that Prohibits Input of a list of invalid characters in textbox

我是一名正在使用 Asp.net MVC 的大学生,我需要进行自定义验证,以防止输入特定字符,例如 @#$%* 等特定字段。 我知道自定义验证有点麻烦,但这部分任务需要这样做。 我不介意我用一根手指打字,但是大学把学习任何编程主题或语言的所有乐趣都带走了,因为我不能花太多时间来学习熟练的概念实现。 在这种情况下,自定义验证。

我已经创建了一个 InvalidCharsAttribute Class 并且已经将必要的字段添加到必要的 class 中,如下所示...

InvalidCharsAttribute.cs

using System.ComponentModel.DataAnnotations;


namespace EnrollmentApplication.Models
{
    public class InvalidCharsAttribute : ValidationAttribute

    {
        readonly string invalidChars;

        public InvalidCharsAttribute(string invalidChars)
        {
            this.invalidChars = invalidChars;
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (value != null)
            {
                if ((string)value == invalidChars)
                {

                 return new ValidationResult("Notes contains unacceptable characters");


                }
            }

            return ValidationResult.Success;
        }
    }

要检查无效字符的字段

 [InvalidChars(@"[*&%#@$^!]", ErrorMessage = "*&%#@$^! are invalid characters")]
        public virtual string Notes { get; set; }

我知道if ((string)value == invalidChars)是错误的,我只是不确定如何重写/添加代码以便我的自定义验证有效。 最简单的解决方案会很棒。

您可以使用 Regex 实现通过正则表达式验证您的字符串。 如果您要比较的字符串与任何无效字符匹配,则响应将大于零,在这种情况下,您的代码应返回 false:

    Regex.Matches(yourstring,@"[a-zA-Z]").Count;

编辑后的代码如下:

    if (value != null)
        {
            if (Regex.Matches(((string)value),@"[*&%#@$^!]").Count > 0)
            {

             return new ValidationResult("Notes contains unacceptable characters");

            }
        }

试一试,Regex 实现可能会帮助您进行验证。

问候,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM