2017-08-20 40 views
-2

我想要实现的是我只允许用户只输入google.comgoo.gl中的任何网站。要做到这一点,在python控制台我的示例代码是这样的:如何在Python中使用str.find()函数

Testing find() function in console

返回的结果false是正确的,因为url不符合含有goo.gl标准。我继续测试几个更多选项url,如https://google.gl/LoZXyEfind()函数返回true,因为它不符合包含单词'google.com'或'goo.gl'的条件。

我的问题是,如果我给你变网址,如下所示,我预期它truefind()功能上面返回,因为它完全不含有单词“goo.gl”,但它返回false值。

Test Find function in console

什么是错的情况发生?我如何才能验证网址像上面的情况下,像预期的情况?

谢谢。

+3

请不要” t发布文字截图。它们不可读,不可检测,不能被复制/粘贴。 –

+0

@DanielRoseman,我试着发布实际的文字,但网站不会允许发布短网址,所以我决定打印屏幕,谢谢。 –

+2

您的第二个网址**包含字符串“goo.gl”。 –

回答

3

那行

url = 'https://goo.glAB/LoZXyE' 

确实含有“goo.gl”,但你不想要它,因为它是在URL,它改变了紧跟AB顶级域名。

一种解决方法是不搜索goo.gl,而是搜索//goo.gl/。这在您给出的示例中起作用,并且可以防止更改顶级域的以下字符和前一个字符。这使得行

url.find('//google.com/') == -1 and url.find('//goo.gl/') == -1 

请记住,上面的行只能在交互式控制台中工作。要在程序中使用它把它放在一个if线或表达式,如

if url.find('//google.com/') == -1 and url.find('//goo.gl/') == -1: 

expr = url.find('//google.com/') == -1 and url.find('//goo.gl/') == -1 

或(更喜欢交互式行)

print(url.find('//google.com/') == -1 and url.find('//goo.gl/') == -1) 
+0

对这类事情最好使用[urlparse](https://docs.python.org/2/library/urlparse.html#urlparse.urlparse),并明确检查域组件(即'netloc财产)。 – ekhumoro

+0

@RoryDaulton,非常感谢您的帮助和描述性答案,它的工作原理与预期一致。是的,在行动中,我使用'if,else'已经在我的真实代码中,我使用Flask-Validator内置的'[validator.url()]'验证URL,这有助于我验证url,只有我允许我的问题用户只能输入来自google.com和goog.gl的任何网址。你的回答确实有帮助,非常感谢:) –

+0

@ekhumoro,非常感谢替代品,我会看看,并尝试它。 :) –

0

尝试

url.find('google.com/') == -1 and url.find('goo.gl/') == -1: 
    ... 
+3

这不是有效的Python代码:它会引发一个'SyntaxError'。 – ekhumoro

+0

是啊!编辑。谢谢@ekhumoro – gipsy

相关问题