C# 自定义验证属性,该属性禁止在textbox中输入无效字符列表
我是一名使用Asp.net MVC的大学生,我需要获得一个自定义的验证工作,以防止为特定字段输入特定字符,例如@#$%*,等等。我知道自定义验证有点麻烦,但这正是任务的这一部分所要求的。我不介意我用一根手指打字,但大学会让我失去学习任何编程主题或语言的乐趣,因为我不能花那么多时间来学习概念的熟练实现。在本例中,自定义验证 我已经创建了一个InvalidCharsAttribute类,并且已经向必需的类添加了必需的字段,如下所示 InvalidCharsAttribute.csC# 自定义验证属性,该属性禁止在textbox中输入无效字符列表,c#,asp.net-mvc,C#,Asp.net Mvc,我是一名使用Asp.net MVC的大学生,我需要获得一个自定义的验证工作,以防止为特定字段输入特定字符,例如@#$%*,等等。我知道自定义验证有点麻烦,但这正是任务的这一部分所要求的。我不介意我用一根手指打字,但大学会让我失去学习任何编程主题或语言的乐趣,因为我不能花那么多时间来学习概念的熟练实现。在本例中,自定义验证 我已经创建了一个InvalidCharsAttribute类,并且已经向必需的类添加了必需的字段,如下所示 InvalidCharsAttribute.cs using Sys
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我或多或少地猜测它们有一组特定的字符,这些字符在整个系统中都不会改变,因为这是家庭作业。我并不是建议把它们扔到任何地方,但确实有一些情况下,它不那么令人头痛。