检查字符串中是否包含特殊字符(/*-+_@&$#%)?

72

如何检查字符串是否仅包含数字、字母或空格?


如果您为字符串编写扩展方法,则可以构建检查。 您还可以使用已经编写的扩展方法,例如Extensions.cs NuGet包,使其变得简单:例如:“abcXYZ123”.IsAlphaNumeric()将返回True,而“abcXYZ123@”.IsAlphaNumeric()将返回False。默认情况下,在.IsAlphaNumeric()中忽略空格,但是您可以使空格成为无效字符,因此:“abc 123”.IsAlphaNumeric(false)将返回False。 - Cornelius J. van Dyk
14个回答

115

C# 中这很简单:

private bool HasSpecialChars(string yourString)
{
    return yourString.Any(ch => ! char.IsLetterOrDigit(ch));
}

9
为什么这个答案没有点赞?在我看来它是正确且快速的。对于这样一个简单的问题,比起深入研究正则表达式要好得多。 - Marcello Grechi Lins
2
@MarcelloGrechiLins,当使用编译后的Regex并跨大量字符串重复使用时,它完全有效且可能更快。就像软件开发一样,存在权衡之处。 :-) - Norman H
1
我实际上会给这个点踩赞 - 经过简单的测试,它会将 \n 返回为 true,我怀疑没有人想要那样。至少使用正则表达式可以将其限制为实际的特殊字符。 - Charles
7
@Charles 请查看原始问题:“如何检查一个字符串,以确保它仅包含数字、字母或空格?” 代码片段满足要求。 - prmph
3
没错,我的错。我回答了这个问题,把它和另一个关于只获得特殊字符的帖子搞混了。 - Charles
显示剩余6条评论

95

2
我为我的实用类编写了这个辅助函数。它的工作非常完美。public static bool ContainsOnlyAlphaNumericCharacters(this string inputString) { var regexItem = new Regex("^[a-zA-Z0-9 ]*$"); return regexItem.IsMatch(inputString); } - vibs2006

19

试试这个方法。

public static bool hasSpecialChar(string input)
    {
        string specialChar = @"\|!#$%&/()=?»«@£§€{}.-;'<>_,";
        foreach (var item in specialChar)
        {
            if (input.Contains(item)) return true;
        }

        return false;
    }

无法检查“(引号)”。 - MAFAIZ
您可以通过在字符串中的“”之前添加转义\来检查引号。例如:"|!#$%&/()=?»«@£§€{}.-;'"<>_,"; - George Daniel

17
string s = @"$KUH% I*$)OFNlkfn$";
var withoutSpecial = new string(s.Where(c => Char.IsLetterOrDigit(c) 
                                            || Char.IsWhiteSpace(c)).ToArray());

if (s != withoutSpecial)
{
    Console.WriteLine("String contains special chars");
}

7
String test_string = "tesintg#$234524@#";
if (System.Text.RegularExpressions.Regex.IsMatch(test_string, "^[a-zA-Z0-9\x20]+$"))
{
  // Good-to-go
}

这里有一个示例: http://ideone.com/B1HxA

4
如果接受的字符列表相当小,您可以使用如下的正则表达式:
Regex.IsMatch(items, "[a-z0-9 ]+", RegexOptions.IgnoreCase);

这里使用的正则表达式搜索a-z和0-9之间的任何字符,包括空格(方括号[]中的内容),其中有一个或多个这些字符(加号+ - 您可以使用*表示0个或更多个)。最后一项选项告诉正则表达式解析器忽略大小写。
这将在不是字母、数字或空格的任何内容上失败。要将更多字符添加到受保护列表中,请将其添加到方括号中。

3

使用以下正则表达式验证字符串,以确保它只包含数字、字母或空格:

/^[a-zA-Z0-9\s]+$/

[a-zA-Z0-9 ]

2
private bool isMatch(string strValue,string specialChars)
    {
       return specialChars.Where(x => strValue.Contains(x)).Any();
    }

1
这个答案与其他答案相似,但同时也有很大的不同。你能解释一下这些不同之处,并说明它为什么更好吗? - joanis
抱歉,我还没有测试它的性能,这只是另一种解决问题的方式。 - Mumriz Khan

2

你可以使用布尔类型来实现。最近我学到了这种方法。在这个例子中,我正在检查用户在控制台上的输入:

using System;
using System.Linq;

namespace CheckStringContent
{
    class Program
    {
        static void Main(string[] args)
        {
            //Get a password to check
            Console.WriteLine("Please input a Password: ");
            string userPassword = Console.ReadLine();

            //Check the string
            bool symbolCheck = userPassword.Any(p => !char.IsLetterOrDigit(p));

            //Write results to console
            Console.WriteLine($"Symbols are present: {symbolCheck}");     
        }
    }
}

如果字符串中存在特殊字符(symbolCheck),则返回“True”,如果不存在,则返回“False”。


1
创建一个方法并称之为hasSpecialChar,该方法有一个参数。使用foreach循环检查文本框中的每个字符,在数组中添加尽可能多的字符,我只是使用)和(来防止SQL注入。请保留HTML标签。
public void hasSpecialChar(string input)
    {
        char[] specialChar = {'(',')'};
        foreach (char item in specialChar)
        {
            if (input.Contains(item)) MessageBox.Show("it contains");
        }
    }

在您的按钮单击事件中,或者您双击按钮两次,就像这样:

private void button1_Click(object sender, EventArgs e)
    {
       hasSpecialChar(textbox1.Text);
    }

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