否定正则表达式中的特定字符

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 == ' ';

【讨论】:

以上是关于否定正则表达式中的特定字符的主要内容,如果未能解决你的问题,请参考以下文章

否定字符类中的单引号

JS 正则表达式否定匹配(正向前瞻)

正则表达式的否定

您将如何使用正则表达式来忽略包含特定子字符串的字符串?

Maven-versions-plugin:用于否定不遵循特定标签格式的版本的正则表达式

用于否定字符类的 C# 正则表达式,除非字符彼此相邻