【问题标题】:Regular Expression in MVC of c# to match charactersc#的MVC中的正则表达式匹配字符
【发布时间】: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. 仅匹配字符串末尾的那些字符。删除那个$
  • 因为它是我的不允许字符表中的字符集合
  • 然后把它放在方括号里:@"[ç\"·$%&amp;/()=?$]".
  • 使用您的代码,您实际上是在说“如果您没有将这些字符中的任何一个视为字符串输入的最后一个字符,请显示错误消息。”我不认为那是你真正想要发生的事情。
  • 我会尝试再次解释,也许我的英语不是世界上最好的。如果我看到任何不允许的字符(正如 Tim Ebenezer 建议的那样),我必须在 summaryvalidation 中显示一条错误消息

标签: c# regex asp.net-mvc


【解决方案1】:

您的正则表达式只查找一个字符,然后查找字符串的结尾。如果您只想允许该集合中的字符,您应该使用类似的表达式 - [ç\"·$%&amp;/()=?]+$

由于您已明确不希望字符串中包含这些字符,因此请使用否定的前瞻:

(?![ç\"·$%&amp;/()=?])

【讨论】:

  • 我测试过,在所有情况下我总是看到无效消息
  • 由于这些是不允许的字符,您应该检查它们是否存在,而不是它们是否存在。您可能想在您的问题中反映这些是不允许使用的字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2013-02-18
相关资源
最近更新 更多