【问题标题】: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[]/!$%^&*()\-_+{};:'£@#.?]*$"跨度>

标签: c# regex


【解决方案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 == ' ';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      相关资源
      最近更新 更多