否定正则表达式中的特定字符
Posted
技术标签:
【中文标题】否定正则表达式中的特定字符【英文标题】:Negating specific characters in regex 【发布时间】:2014-01-15 01:42:36 【问题描述】:如何阻止文本框条目中的空白?
我试过了,但它不起作用:
[RegularExpression(@"/^\s/", ErrorMessage = "white space is not allowed in username")]
public string UserName get; set;
'^' 否定不应允许文本中有空格,但它不允许我在字段中输入任何文本。有什么帮助吗?
【问题讨论】:
您需要为此使用正则表达式吗?试着找个地方,如果找到了,就不要再往前走了。 我正在使用数据注释,所以我需要坚持使用正则表达式 @"^[A-Za-z0-9[]/!$%^&*()\-_+;:'£@#.?]*$"跨度> 【参考方案1】:刚刚看到你说的“你需要使用DataAnnotation”的评论,这是没有Regex的方法
public class WhiteSpaceCheckerAttribute : ValidationAttribute
public override bool IsValid(object value)
var strValue = value as string;
return strValue != null && !strValue.Contains(" ");
用法
[WhiteSpaceChecker(ErrorMessage = "white space is not allowed in username")]
public string UserName get; set;
这不包括您可以轻松实现的客户端验证。以下链接应该可以帮助您了解这个概念Client-side custom data annotation validation
【讨论】:
【参考方案2】:^
仅在字符类中用作“否定”,例如[^ ]
表示除空格以外的任何字符。在[]
之外使用时,^
表示“在字符串的开头。所以您的原始 RE 说“字符串开头的空格” - 几乎与您想要的相反。
我不熟悉 C# RE 的细节,但从其余的答案来看,您想要的 RE 可能是 ^\S+$
:字符串开头和结尾之间有 1 个或多个非空格字符。
【讨论】:
我不熟悉正则表达式,我的要求是字符串中不允许有空格,所有其他字符和符号都允许 此答案已添加到 Stack Overflow Regular Expression FAQ 的“字符类”下。【参考方案3】:使用\S
(这是\s
的否定=非空白字符):
@"^\S+$"
如果允许空字符串,将+
替换为*
:
@"^\S*$"
【讨论】:
.net 正则表达式中没有/
分隔符
@Anirudh,谢谢你的评论。我根据您的评论修复了它。
@Arun,很可能是 ^
和 $
终结符。删除它们,它可能会产生您正在寻找的结果。
我试过@"/\S+/" 但还是不行?我一直在验证非空白字符串【参考方案4】:
您可以在没有 RegEx 的情况下执行此操作。通过在文本框的 KeyPress 事件中添加此代码。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
e.Handled = e.KeyChar == ' ';
【讨论】:
以上是关于否定正则表达式中的特定字符的主要内容,如果未能解决你的问题,请参考以下文章