0

我正在开发一个有优惠券的购物车,店主告诉我,顾客似乎不愿意为已发行的优惠券使用合适的外壳,并且不断抱怨优惠券不起作用,这让员工很恼火。

我最初打算简单地使用 strtoupper() 用户输入,但这将要求所有者只使用大写的优惠券代码,这没有任何意义。

我想在用户输入上做一个 preg_match() ,如果所有字符都正确并完全忽略大小写,就让它匹配。但是唉......我不知道如何使用正则表达式来获得我需要的东西。

这就是我现在所拥有的:

strtoupper ($this->request->post['coupon'])

正如我所说,这对来自 db 的大写优惠券代码非常有效,但会迫使所有者将所有代码大写。

任何帮助将不胜感激。

-V

4

3 回答 3

6

只需将两者转换为相同的大小写并进行比较:

if(strtolower($input) == strtolower($check))

更好的是,用于strcasecmp()进行二进制安全的不区分大小写的字符串比较:

if (strcasecmp($input, $check) == 0)
于 2012-09-28T20:20:45.273 回答
1

这取决于您如何查看优惠券代码。如果您正在运行数据库查询,SQL 和朋友允许您执行不区分大小写的查询。如果您将它们与例如配置文件一一进行比较,那么不要说if (code_entered === valid_code),说if (strtolower(code_entered) === strtolower(valid_code))。否则,我们需要知道实际比较是如何发生的,因为这是重要的部分。

于 2012-09-28T20:21:00.677 回答
0

“这将要求所有者只使用大写的优惠券代码,这是没有意义的。”

从您描述您的情况的方式来看,将这些优惠券代码存储在一致的大小写(大写或小写)中以匹配客户输入的一致大小写( 'd 或'd)实际上似乎是有意义的。strtoupperstrtolower

也就是说,正则表达式不区分大小写的匹配是使用/i修饰符实现的。

但是strcasecmp(),已经提出,很可能是一个更好的解决方案。

于 2012-09-28T20:22:37.703 回答