C# 自定义验证属性,该属性禁止在textbox中输入无效字符列表

C# 自定义验证属性,该属性禁止在textbox中输入无效字符列表,c#,asp.net-mvc,C#,Asp.net Mvc,我是一名使用Asp.net MVC的大学生,我需要获得一个自定义的验证工作,以防止为特定字段输入特定字符,例如@#$%*,等等。我知道自定义验证有点麻烦,但这正是任务的这一部分所要求的。我不介意我用一根手指打字,但大学会让我失去学习任何编程主题或语言的乐趣,因为我不能花那么多时间来学习概念的熟练实现。在本例中,自定义验证 我已经创建了一个InvalidCharsAttribute类,并且已经向必需的类添加了必需的字段,如下所示 InvalidCharsAttribute.cs using Sys

我是一名使用Asp.net MVC的大学生,我需要获得一个自定义的验证工作,以防止为特定字段输入特定字符,例如@#$%*,等等。我知道自定义验证有点麻烦,但这正是任务的这一部分所要求的。我不介意我用一根手指打字,但大学会让我失去学习任何编程主题或语言的乐趣,因为我不能花那么多时间来学习概念的熟练实现。在本例中,自定义验证

我已经创建了一个InvalidCharsAttribute类,并且已经向必需的类添加了必需的字段,如下所示

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; }

要检查无效字符的字段

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; }


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

可以使用正则表达式实现通过正则表达式验证字符串。如果要比较的字符串与任何无效字符匹配,则响应将大于零,在这种情况下,代码应返回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实现可能会帮助您进行验证


关于,

我认为最简单的方法是使用jQuery输入掩码插件,并使用正则表达式掩码来防止输入无效字符。您可以为验证在代码中的位置以及验证输入的正确方式提供参数,但就个人而言,我更喜欢使用掩码设置输入字段,以防止任何无效输入。但是,在进行字符串比较时,
string.Equals
比普通的
=
更好。因为在进行比较时,
==
会考虑大小写。使用
string.Equals
可以在调用时传递一些选项,以便忽略大小写:@Dortimer,如果值可能包含无效字符,则这可能对系统没有危害。破解任何jQuery或其他前端解决方案都是非常简单的,其中一种方法是将无效的字符字符串拆分为一个字符数组,在该数组中迭代查找值中包含的任何字符。@ChiefTwoPencils我或多或少地猜测它们有一组特定的字符,这些字符在整个系统中都不会改变,因为这是家庭作业。我并不是建议把它们扔到任何地方,但确实有一些情况下,它不那么令人头痛。