【问题标题】:How to check for special characters using regex如何使用正则表达式检查特殊字符
【发布时间】:2011-01-17 18:38:36
【问题描述】:

网络。我创建了一个正则表达式验证器来检查特殊字符,这意味着我不希望用户名中有任何特殊字符。以下是代码

Regex objAlphaPattern = new Regex(@"[a-zA-Z0-9_@.-]");
            bool sts = objAlphaPattern.IsMatch(username);

如果我将用户名提供为 $%^&asghf,那么验证器会提供无效数据格式,这是我想要的结果,但如果我提供数据 s23_@.-^&()%^ $# 那么我的验证器应该阻止数据,但我的验证器允许错误的数据

那么如何不允许除a-z A-A 0-9 _ @ .-以外的任何特殊字符-

谢谢 苏尼尔·库马尔·萨胡

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    您的模式仅检查给定字符串是否包含任何“非特殊”字符;它不排除不需要的字符。你想改变两件事;使其检查整个字符串是否仅包含允许的字符,并使其检查多个字符:

    ^[a-zA-Z0-9_@.-]+$
    

    在模式前添加^,使其在字符串开头开始匹配。还在后面加上+$+保证字符串中至少有一个字符,$保证字符串匹配到末尾。

    【讨论】:

      【解决方案2】:

      你的表达有些问题。首先,您在表达式的开头和结尾没有开始字符串字符 ^ 和结束字符串字符 $,这意味着它只需要在字符串中的某处找到匹配项。

      其次,您目前只在寻找一个角色。要强制匹配您需要使用的所有字符 * 应该是这样的:

      Regex objAlphaPattern = new Regex(@"^[a-zA-Z0-9_@.-]*$");
      bool sts = objAlphaPattern.IsMatch(username);
      

      【讨论】:

      • 感谢 Spencer Ruport,您的回复对我帮助很大。我犯了大错,然后你解决了我的问题
      • @SunilKumarSahoo 你的帖子说:I don not want any special characters in username。您的意思是您只需要数字和字母和/或以下任何特殊字符:_ @ . -。我问是因为接受的响应还包括这些特殊字符。例如,我测试了上面的正则表达式,它传递了包含模式中提到的一些特殊字符的Tom@Doe8test.com_Jane-sub 字符串,但它失败了Tom@Doe8test.com_Jane-sub#Wen!Fy 字符串,因为它包含#!
      【解决方案3】:

      将您的正则表达式更改为^[a-zA-Z0-9_@.-]+$。这里^表示字符串的开头,$是字符串的结尾。

      【讨论】:

      • 我不确定它在括号内时是否被视为特殊字符。我可能错了。
      猜你喜欢
      • 2014-07-16
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      相关资源
      最近更新 更多