0

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

到目前为止,我有这个条件语句:

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

但是,当 url 确实有 http:// 或 https:// 时,这将返回 true

不确定这是为什么?

4

4 回答 4

3

您需要&&代替||,假设您的字符串以 开头,https那么首先检查StartsWith("http://"将给出true. 如果 Text 以http

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

您可以将这两个条件与 || 结合使用 并用 !

if (!(url.Text.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || url.Text.StartsWith("https://", StringComparison.OrdinalIgnoreCase)  && url.Text.Length > 493)
于 2014-05-23T11:46:12.457 回答
2

您需要将||in 更改为&&

于 2014-05-23T11:46:17.630 回答
1

网址将以httpor开头https,这意味着其中一个将始终为真。你需要检查他们&&

于 2014-05-23T11:46:48.523 回答
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;
}
于 2014-05-23T11:55:25.707 回答