正则表达式排除这些字符

11

我正在使用MVC数据注释,我的要求是地址字段可以包含任何字符(即除英文字符外,也允许包含其他字符),但不能包含< > . ! @ # % / ? *

我搜索了许多网站,但找不到如何编写此正则表达式。

到目前为止,我尝试过:

[Required(ErrorMessage = "Address Required.")]
[RegularExpression(@"^[<>.!@#%/]+$", ErrorMessage = "Address invalid.")]
public string Address { get; set; }
4个回答

17

使用正则表达式时,可以通过脱字符(^)来匹配除了指定字符以外的所有字符:

[^abc] 

这个正则表达式将匹配除了a、b和c之外的所有字符。

将以上内容结合起来,您的正则表达式将是:

^[^<>!@#%/?*]+$

需要注意的是,在括号外的符号 '^' 表示匹配行的开头,而在方括号内表示匹配任何不是方括号中列出的字符。


2
在字符类中,您不需要转义正则表达式元字符(除了反斜杠和右方括号)。 - Tim Pietzcker
@TimPietzcker 为什么接受者响应中的模式字符 ?* 被省略了?我有什么误解吗?请帮忙解答。 - nam
1
是的,我认为它们确实丢失了。 - Tim Pietzcker
@agetgonzo 感谢您的回复和详细解释。 - nam

14

目前,你只允许使用仅由这些字母组成的字符串。

请使用

"^[^<>.!@#%/]+$"

我认为您在OP的要求中漏掉了?*,该要求是包含任何字符,除了:< > . ! @ # % / ? *。这里我有什么误解吗? - nam

2

尝试使用正则表达式:

[^<>.!@#%/?*]

你可以删除所有反斜杠。此外,这只匹配一个字符。 - Tim Pietzcker

1

这应该可以完成工作:

"[^<>.!@#%/]"

编辑:

在正则表达式中,.(点)是一个保留字符,因此你需要转义它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接