正则表达式在变量中的逗号之间搜索,并根据值执行逻辑
RegEx to search between commas in variable, and based on value, perform logic
我有一个名为 $DiscountDescriptionTrimmed
的变量,它可能包含以下格式的数据:
"Free and Fast Shipping Club Member, A63540678, "
或者
"A63540678, "
我想在这个变量中找到礼品卡号(例如:A63540678)并据此执行逻辑,将'Gift Cards'附加到$DiscountDescription
的开头。
目前,我的代码只考虑礼品卡号是否在变量的前面。如果它位于任何其他位置(例如,在逗号之后)则不会。
一定有一种 RegEx 方法可以更好地执行此 PHP 代码,对吧?我的代码中列出了各种礼品卡方案,主要包括以特定字母或数字开头且具有一定长度的礼品卡。
我当前的 PHP 代码是:
$Description = $item->getName();
$DiscountDescription = $_order->getDiscountDescription();
$DiscountDescriptionTrimmed = strtok($DiscountDescription,', ');
if ($DiscountDescriptionTrimmed != '') {
if (substr($DiscountDescriptionTrimmed,0,1) === "e" && strlen($DiscountDescriptionTrimmed) === 11){
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
}
elseif (substr($DiscountDescriptionTrimmed,0,1) === "E" && strlen($DiscountDescriptionTrimmed) === 9){
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
}
elseif (substr($DiscountDescriptionTrimmed,0,1) === "A" && strlen($DiscountDescriptionTrimmed) === 9){
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
}
elseif (strlen($DiscountDescriptionTrimmed) === 17 && substr_count($DiscountDescriptionTrimmed,'-') === 2){
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
}
elseif (strlen($DiscountDescriptionTrimmed) === 8 && ctype_digit($DiscountDescriptionTrimmed)){
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
}
}
礼品卡场景:
场景一:如果礼品卡以"e"开头,长度为11个字符。
场景二:如果礼品卡以"E"开头,长度为9个字符。
场景三:如果礼品卡以"A"开头,长度为9个字符。
情况四:礼品卡长度为17个字符,中间有两个“-”。
情况五:如果礼品卡长度为8个字符且仅由数字组成。
我不知道 PHP,但快速搜索它的文档会发现它使用 perl 风格的正则表达式语法,并且还具有执行搜索和替换的功能,例如函数 preg_replace。我找到的文档位于
here
你看过文档了吗?
如果有,对你没有帮助吗?
任务是
(1) 从字符串中过滤出卡号;
(2) 不同场景使用卡号。这是我为您准备的:
$DiscountDescriptionTrimmed = "Free and Fast Shipping Club Member, A63540678, ";
$pattern = '/^(e[a-zA-Z]{10})|(E[a-zA-Z]{8})|(A[a-zA-Z]{8})|([a-zA-Z\-]{16})|([0-9]{8})/';
preg_match($pattern, $DiscountDescriptionTrimmed, $match);
for($i=1; $i<=5; $i++) {
$len = strlen($match[$i]);
if($len < 1) {
continue;
} else {
// Scenario $i as you shown in the question
/* for example */
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
break;
}
}
(e[a-zA-Z]{10})
, e + 10 个字母
(E[a-zA-Z]{8})
, E + 8个字母
(A[a-zA-Z]{8})
,A+8个字母
([a-zA-Z\-]{16})
, 16 个字母 + '-'
([0-9]{8})
, 8 个数字
如果卡号只有数字,没有字母,(字符有歧义),则将[a-zA-Z]
替换为[0-9]
如果是混合物,就用[0-9a-zA-Z]
试试下面的代码。希望对你有帮助。
$text = "e7867445537, Free and Fast Shipping Club Member, A63540678, e7678 , Free and Fast Shipping Club Member, E67485536 , ET66U-UIK-66eh6YY,
ET66UuUIKd66eh6YY, 99887765";
function remove_zero($matches)
{
return 'Gift Cards ' .$matches[0];
}
echo preg_replace_callback(
"/(([\d]{8}?)|([A][\d]{8}?)|([e][\d]{10}?)|([E][\d]{8}?)|(([\w]*[-]{1}[\w]*[-]{1}[\w]*)([\S]{17})?))([\D\W]|$)/",
"remove_zero",
$text);
我有一个名为 $DiscountDescriptionTrimmed
的变量,它可能包含以下格式的数据:
"Free and Fast Shipping Club Member, A63540678, "
或者
"A63540678, "
我想在这个变量中找到礼品卡号(例如:A63540678)并据此执行逻辑,将'Gift Cards'附加到$DiscountDescription
的开头。
目前,我的代码只考虑礼品卡号是否在变量的前面。如果它位于任何其他位置(例如,在逗号之后)则不会。
一定有一种 RegEx 方法可以更好地执行此 PHP 代码,对吧?我的代码中列出了各种礼品卡方案,主要包括以特定字母或数字开头且具有一定长度的礼品卡。
我当前的 PHP 代码是:
$Description = $item->getName();
$DiscountDescription = $_order->getDiscountDescription();
$DiscountDescriptionTrimmed = strtok($DiscountDescription,', ');
if ($DiscountDescriptionTrimmed != '') {
if (substr($DiscountDescriptionTrimmed,0,1) === "e" && strlen($DiscountDescriptionTrimmed) === 11){
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
}
elseif (substr($DiscountDescriptionTrimmed,0,1) === "E" && strlen($DiscountDescriptionTrimmed) === 9){
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
}
elseif (substr($DiscountDescriptionTrimmed,0,1) === "A" && strlen($DiscountDescriptionTrimmed) === 9){
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
}
elseif (strlen($DiscountDescriptionTrimmed) === 17 && substr_count($DiscountDescriptionTrimmed,'-') === 2){
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
}
elseif (strlen($DiscountDescriptionTrimmed) === 8 && ctype_digit($DiscountDescriptionTrimmed)){
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
}
}
礼品卡场景:
场景一:如果礼品卡以"e"开头,长度为11个字符。
场景二:如果礼品卡以"E"开头,长度为9个字符。
场景三:如果礼品卡以"A"开头,长度为9个字符。
情况四:礼品卡长度为17个字符,中间有两个“-”。
情况五:如果礼品卡长度为8个字符且仅由数字组成。
我不知道 PHP,但快速搜索它的文档会发现它使用 perl 风格的正则表达式语法,并且还具有执行搜索和替换的功能,例如函数 preg_replace。我找到的文档位于 here 你看过文档了吗? 如果有,对你没有帮助吗?
任务是
(1) 从字符串中过滤出卡号;
(2) 不同场景使用卡号。这是我为您准备的:
$DiscountDescriptionTrimmed = "Free and Fast Shipping Club Member, A63540678, ";
$pattern = '/^(e[a-zA-Z]{10})|(E[a-zA-Z]{8})|(A[a-zA-Z]{8})|([a-zA-Z\-]{16})|([0-9]{8})/';
preg_match($pattern, $DiscountDescriptionTrimmed, $match);
for($i=1; $i<=5; $i++) {
$len = strlen($match[$i]);
if($len < 1) {
continue;
} else {
// Scenario $i as you shown in the question
/* for example */
$_order->setDiscountDescription('Gift Cards ' . $DiscountDescription);
break;
}
}
(e[a-zA-Z]{10})
, e + 10 个字母
(E[a-zA-Z]{8})
, E + 8个字母
(A[a-zA-Z]{8})
,A+8个字母
([a-zA-Z\-]{16})
, 16 个字母 + '-'
([0-9]{8})
, 8 个数字
如果卡号只有数字,没有字母,(字符有歧义),则将[a-zA-Z]
替换为[0-9]
如果是混合物,就用[0-9a-zA-Z]
试试下面的代码。希望对你有帮助。
$text = "e7867445537, Free and Fast Shipping Club Member, A63540678, e7678 , Free and Fast Shipping Club Member, E67485536 , ET66U-UIK-66eh6YY,
ET66UuUIKd66eh6YY, 99887765";
function remove_zero($matches)
{
return 'Gift Cards ' .$matches[0];
}
echo preg_replace_callback(
"/(([\d]{8}?)|([A][\d]{8}?)|([e][\d]{10}?)|([E][\d]{8}?)|(([\w]*[-]{1}[\w]*[-]{1}[\w]*)([\S]{17})?))([\D\W]|$)/",
"remove_zero",
$text);