gpt4 book ai didi

ruby-on-rails - Rails 断言的正则表达式以查看路径是否匹配

转载 作者:数据小太阳 更新时间:2023-10-29 08:05:04 26 4
gpt4 key购买 nike

我正在尝试为 Rails 测试做一个断言,该测试测试一个重定向到某个 URL 的方法,但是对于我的断言,该 URL 只是部分完整,因为我不完全确定完整路径是什么。因此,我正在尝试为部分路径编写一个断言。这就是我所拥有的,但我对正则表达式不是很好。

assert_match/[#{PAYPAL_CONFIG["url"]}]./, @response.redirect_url

我希望它匹配 paypal 路径,然后匹配之后的任何内容,但我不确定如何正确设置。当我使用此正则表达式进行匹配时,我的测试出现错误 empty range in char class:/[https:\/\/www.sandbox.paypal.com\/cgi-bin\/webscr?]./ 我知道我的正则表达式是错误的,我试图匹配 paypal url 之后的任何内容。有人可以帮帮我吗?

我可以看到 [] 方括号充当或我想要的是指定的路径以及之后的任何内容。

我已将我的断言更改为:

/#{PAYPAL_CONFIG["url"]}.*/

我的测试通过了,但我收到了这个警告:警告:MiniTest::MINI_DIR 已被删除。不要违反其他人的内部规则。 我的正则表达式是否正确?谢谢

最佳答案

在将 url 放入正则表达式之前,您应该对其进行转义。

有点像

/#{Regexp.escape(PAYPAL_CONFIG["url"])}/ 

可能会更好。

WRT 你的例子,问题出在 cgi-bin 位。正则表达式引擎需要一个连字符来表示字符范围,而 i-b 不是合法范围,因为 i 上方和 b 下方都没有字符。

没有方括号的版本之所以有效,是因为正则表达式引擎只将连字符解释为括号内的一系列字符,但正则表达式本身仍然会被搞乱。

>> foo = "https:\/\/www.sandbox.paypal.com\/cgi-bin\/webscr?"
=> "https://www.sandbox.paypal.com/cgi-bin/webscr?"
>> /[#{foo}]/
RegexpError: empty range in char class: /[https:\/\/www.sandbox.paypal.com\/cgi-bin\/webscr?]/
from (irb):2
>> /[#{Regexp.escape(foo)}]/
=> /[https:\/\/www\.sandbox\.paypal\.com\/cgi\-bin\/webscr\?]/
>> Regexp.escape(foo)
=> "https://www\\.sandbox\\.paypal\\.com/cgi\\-bin/webscr\\?"
>> foo
=> "https://www.sandbox.paypal.com/cgi-bin/webscr?"

关于ruby-on-rails - Rails 断言的正则表达式以查看路径是否匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13532961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com