.Starts没有按预期工作?

时间:2014-05-23 11:44:20

标签: c# if-statement startswith

我有一个网址,我需要检查它是否以http://或https://开头,并且网址的长度不超过493个字符。

到目前为止,我有这个条件声明:

else if (!url.Text.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ||
         !url.Text.StartsWith("https://", StringComparison.OrdinalIgnoreCase) &&
         url.Text.Length > 493)
    IsValid = false;

但是,如果网址包含http://或https://

,则返回true

不确定为什么会这样?

4 个答案:

答案 0 :(得分:3)

您需要&&而不是||,假设您的字符串以https开头,那么首先检查StartsWith("http://"会给true。如果文本以http

开头,则应用相同的内容
else if (!url.Text.StartsWith("http://", StringComparison.OrdinalIgnoreCase) && !url.Text.StartsWith("https://", StringComparison.OrdinalIgnoreCase) && url.Text.Length > 493)
                IsValid = false;

您可以将两个条件与||结合使用用<!p>否定结果

if (!(url.Text.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || url.Text.StartsWith("https://", StringComparison.OrdinalIgnoreCase)  && url.Text.Length > 493)

答案 1 :(得分:2)

您需要将||更改为&&

答案 2 :(得分:1)

网址将以httphttps开头,这意味着其中一个将始终为真。您需要使用&&

进行检查

答案 3 :(得分:0)

导致问题的||&&逻辑

将其重新编写为嵌套if以使其更清晰

private static bool IsValidUrl(string url)
{
    if(url.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || 
       url.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
       if(url.Text.Length < 493)
           return true;

    return false;
}