【发布时间】:2013-11-05 08:52:12
【问题描述】:
我正在使用正则表达式来匹配一些字符,例如ç"·$%&/()=? 等。
我正在测试网页中的正则表达式
http://www.softlion.com/webTools/RegExpTest/default.aspx
它正在工作,但是当我在我的 MVC 模型中使用正则表达式时,它不起作用,并且总是显示错误消息。
c#中使用的指令是:
[RegularExpression(@"[ç\"·$%&/()=?]$", ErrorMessage="some message")]
ç\"·$%&/()=?]$ 是不允许的字符
我仍然有问题,我不明白为什么它不起作用
如果我写如下内容,我总是会看到错误消息:ABCDEF(对我来说是正确的字符)或ABCDçEF=GHIJ(不正确)
在模型中,我将正则表达式更改为自定义属性。在我拥有的模型属性中:
[CaracteresNoPermitidosAttribute(ErrorMessage="test 123")] 公共字符串 RazonSocial { 获取;放; }
而Attribute类是:
public class CaracteresNoPermitidosAttribute : RegularExpressionAttribute
{
public CaracteresNoPermitidosAttribute() : base(GetRegex())
{ }
private static string GetRegex()
{
// I take the data from the table to get the disallowed characters
var lista = (List<Caracterko>) new CaracterkoProxy().ObtenerTodos();
// I transform the list to string
var str = string.Join("", from x in lista where x.Activo select x.Caracter.ToString());
return @"(?![" + str + "])$";
}
}
我用 Tim 给出的例子作为正则表达式
【问题讨论】:
-
为什么会有
$?这会将您的正则表达式锚定到字符串的末尾,i.e. 仅匹配字符串末尾的那些字符。删除那个$。 -
因为它是我的不允许字符表中的字符集合
-
然后把它放在方括号里:
@"[ç\"·$%&/()=?$]". -
使用您的代码,您实际上是在说“如果您没有将这些字符中的任何一个视为字符串输入的最后一个字符,请显示错误消息。”我不认为那是你真正想要发生的事情。
-
我会尝试再次解释,也许我的英语不是世界上最好的。如果我看到任何不允许的字符(正如 Tim Ebenezer 建议的那样),我必须在 summaryvalidation 中显示一条错误消息
标签: c# regex asp.net-mvc