检查字符串是否包含'&'仅限人物

时间:2015-06-01 05:09:30

标签: c# asp.net c#-4.0

如何检查字符串是否包含“&”只要。我的意思是,如果用户将进入&或&&&或一串'&'。请注意,http://myurl.com/&var=79或类似的内容应该被忽略。它应检查包含&的那些字符串。字符。请帮帮我!!!

17 个答案:

答案 0 :(得分:18)

当你说

  

字符串包含“&”仅

我假设,包含任何其他字符的字符串无效。

string str = "&&&";
bool result = str.All(x => x == '&'); //true, because it contains no other char

另一种方式 - 没有linq的oneliner

bool result = str.Replace("&", String.Empty).Length == 0;

答案 1 :(得分:15)

我确信有一种更好的方法可以使用正则表达式,但这是一个可能的解决方案:

class Program
    {
        static void Main(string[] args)
        {
            char testChar = '&';
            string test1 = "&";
            string test2 = "&&&&&&&&&&";
            string test3 = "&&&&&&&u&&&&&&&";

            Console.WriteLine(checkIfOnly(testChar, test1)); // true
            Console.WriteLine(checkIfOnly(testChar, test2)); // true
            Console.WriteLine(checkIfOnly(testChar, test3)); // false
            Console.WriteLine(checkIfOnly('u', test3));      // false
            Console.WriteLine(checkIfOnly('u', "u"));      // true
            Console.WriteLine(checkIfOnly('u', "uuuu"));      // true


        }

        static bool checkIfOnly(char testChar, string s)
        {
            foreach (char c in s)
            {
                if (c != testChar) return false;
            }
            return true;
        }

    }

答案 2 :(得分:7)

这是一种相当简单的方法:

bool allAmpersands = !string.IsNullOrEmpty(str) && str.Trim('&').Length == 0;

如果该字符串不为空,则在删除两端的&符号后检查字符串中是否还有其他内容。

答案 3 :(得分:5)

使用RegEx解决方案

string str = "&&&&"; 
bool b = Regex.IsMatch(str,"^&+$");

答案 4 :(得分:3)

bool ContainsOnlyAmpersand(string str){ return str.?Length > 0 && !str.Any(c => c != '&'); }

为null /空字符串返回false。 这应该比其他答案更高效,因为Any()可以提前中止,而All()必须始终完全评估字符串。 Except('&')方法创建了一个额外的迭代器,并且由于这个原因可能会更慢(尽管需要基准测试才能确定)。

答案 5 :(得分:1)

问题有点不清楚,但假设想法是测试字符串是否仅由&组成。字符,这是另一种检查方式:

bool containsOnlyAmps = false;
string testString = "&";

containsOnlyAmps = 
    !string.IsNullOrEmpty(testString) 
    && testString == new string('&', testString.Length);

首先检查我们是否有非空的非空字符串。然后它使用string.String(char c, int count)构造函数的string重载。它生成一个包含给定char重复计数次数的字符串。因此,我们提供字符&,重复testString.Lenght次,然后将结果与testString本身进行比较。

如果原始字符串包含任何其他字符,则containsOnlyAmps将为false。否则是真的。

答案 6 :(得分:1)

虽然已经很晚了,但希望这会有所帮助

using System;

public class Program
{
    public static void Main()
    {
        string url = "http://myurl.com/&&var=79";
        string[] parameters = url.Split('&');

        //Method 1 - just to check existance of "&" character
        if(parameters.Length > 0) Console.WriteLine("Character '&' present");

        //Method 2 - check if repeated occurence of "&" exists
        bool isRepetedExistance = false;
        foreach(string keyValuePair in parameters) {
            if(keyValuePair.Length == 0) {
                isRepetedExistance = true;
                break;
            }
        }
        Console.WriteLine(String.Format("Repeted existance of character '&' is {0}present", (isRepetedExistance ? "" : "not ")));
    }
}

答案 7 :(得分:1)

使用正则表达式怎么样:

string strMatch = "Yeah& yeah yeah";
string strNoMatch = "Yeah &&yeah yeah";
Regex r = new Regex("^[^&]*&[^&]*");
r.IsMatch(strMatch);   // returns true
r.IsMatch(strNoMatch); // returns false

正则表达式细分:

^[^&]*  -- string beginning, match any number of occurrences of "not &"
&       -- match exactly one "&"
[^&]*   -- match the rest of the string

答案 8 :(得分:0)

根据您想要执行此操作的频率,我会使用Regex对象来检查字符串。通常,正则表达式在搜索文本中的模式时非常有用。这里 ^ 表示字符串的开头, $ 表示字符串/行的结尾。

Regex re = new Regex("^&+$");

re.IsMatch("&&&&&");          // returns true
re.IsMatch("www.url.com/&2"); // returns false

答案 9 :(得分:0)

您可以尝试这样:

string str;
Regex r = new Regex ("&");
bool b = r.IsMatch (str);

或使用LINQ

new[] { "&" }.All(c => s.Contains(c))

或试试这个:

if (str.Except("&").Any())
{
    //code
}

答案 10 :(得分:0)

如果字符串包含除&符号以外的任何内容,则返回true。

如果字符串为空,OP不会指定该怎么做 - 在这种情况下,此代码将返回false。

bool ContainsNonAmpersands=!Regex.IsMatch(str,"[^&]");

答案 11 :(得分:0)

像这样

static readonly Regex Validator = new Regex(@"^[&]+$");

public static bool IsValid(string str) {
    return Validator.IsMatch(str);
}

正则表达式的工作原理如下:

^ matches the beginning of the string
[...] matches any of the characters that appear in the brackets
+ matches one or more characters that match the previous item
$ matches the end of the string

如果没有^和$ anchors,正则表达式将匹配包含至少一个有效字符的任何字符串,因为正则表达式可以匹配字符串的任何子字符串使用传递它。 ^和$ anchors强制它匹配整个字符串。

答案 12 :(得分:0)

尝试以下代码

    public static void Main() 
    {
        Console.WriteLine(ValidateString("", '&')); //False
        Console.WriteLine(ValidateString("Foo&", '&')); //False
        Console.WriteLine(ValidateString("&Foo", '&')); //False
        Console.WriteLine(ValidateString("&&&", '&')); //True
        Console.WriteLine(ValidateString("&", '&')); //True
        Console.ReadLine();
    }

   static bool ValidateString(string str, char testChar) 
   {
     if (String.IsNullOrEmpty(str))
        return false;
     if (Regex.Matches(str, testChar.ToString()).Count == str.Length)
        return true;
     else
        return false;
   }

答案 13 :(得分:0)

如果要验证/检查字符串是否仅包含&符号(PriorityQueue符号)字符

您可以&

中的Regex课程

检查以下代码示例。您可以执行here

System.Text.RegularExpressions

正则表达式string test1 = "&"; string test2 = "&&&&&&&&&&"; string test3 = "&&&&&&&u&&&&&&&"; var test4 = "foo&"; var regex = new Regex("^[&]+$"); Console.WriteLine(regex.IsMatch(test1)); Console.WriteLine(regex.IsMatch(test2)); Console.WriteLine(regex.IsMatch(test3)); Console.WriteLine(regex.IsMatch(test4)); 检查&符号的一次或多次出现

答案 14 :(得分:0)

这是检查任何字符串是否有&符号的简单方法:

internal class Program
{
    private static void Main(string[] args)
    {
        bool ans = HasAmpersandSign("some&word");
        Console.WriteLine(ans);
    }

    private static bool HasAmpersandSign(string s)
    {
        return s.Contains("&");
    }
}

但是,如果你想检查字符串是否只有一个&符号,则间接暗示字符串只需要一个字符长度。

internal class Program
    {
        private static void Main(string[] args)
        {
            string s = "&someword";

            bool ans = HasAmpersandSign("some&word");

            Console.WriteLine(ans);

            Console.WriteLine(HasAmpersandSignOnly(s));
        }

        private static bool HasAmpersandSign(string s)
        {
            return s.Contains("&");
        }

        private static bool HasAmpersandSignOnly(string s)
        {
            return s.Contains("&") && s.Length == 1;
        }
    }

答案 15 :(得分:0)

这就是我用正则表达式做的方法。 ^& + $匹配仅包含字符'&'的整个字符串。我建议阅读正则表达式它可能看起来很复杂但在尝试解析或过滤字符串时会派上用场。

string invalid = "ccc&cc";
string valid = "&&";

if(Regex.IsMatch(invalid, "^&+$"))
    Console.WriteLine("Does not execute");

if(Regex.IsMatch(valid, "^&+$"))
    Console.WriteLine("Will execute");

答案 16 :(得分:-4)

  string s = "&&& &&&";

  if (s.Contains("&"))
  {
     //do your work
  }