PHP接受任何号码

时间:2017-04-16 07:16:40

标签: php wordpress

我在帖子中有这个代码:

[quick_view product_id="10289" type="button" label="Quick View"]

我希望函数内部的数字“10289”匹配任何数字:

if (stripos($post-> post_content, '[quick_view product_id="XXXX" type="button" label="Quick View"]') !== false) 

如何更换“XXXX”以接受所有号码?

完整代码段

function conditionally_add_scripts_and_styles($posts){
if (empty($posts)) return $posts;
$shortcode_found = false; // use this flag to see if styles and scripts   need to be enqueued
foreach ($posts as $post) {
if (stripos($post-> post_content, '[quick_view product_id="XXXX" type="button" label="Quick View"]') !== false) {
$shortcode_found = true; // bingo!
break;
}
}
if ($shortcode_found) {
// enqueue here
wp_enqueue_style('my-style', '/woocommerce.css');
wp_enqueue_script('my-script', '/script.js');
}
return $posts;
}

谢谢。

2 个答案:

答案 0 :(得分:10)

试试这个,希望它能正常工作。

正则表达式 /product_id\s*\=\s*\"\d+\"/此正则表达式将查找product_id="< - > "

之间的数字

示例:

product_id="xxAbcxx"将被拒绝。

product_id="1212121"将被接受。     

if(preg_match("/product_id\s*\=\s*\"\d+\"/", $post->post_content))
{
    echo "Accepted";   
}

您的完整代码将如下所示。

function conditionally_add_scripts_and_styles($posts)
{
    if (empty($posts))
        return $posts;
    $shortcode_found = false; // use this flag to see if styles and scripts   need to be enqueued
    foreach ($posts as $post)
    {
        if(preg_match("/product_id\s*\=\s*\"\d+\"/", $post->post_content))
        {
            $shortcode_found = true;   
            break;
        }
    }
    if ($shortcode_found)
    {
// enqueue here
        wp_enqueue_style('my-style', '/woocommerce.css');
        wp_enqueue_script('my-script', '/script.js');
    }
    return $posts;
}

答案 1 :(得分:1)

Sahil的回答包括不必要的代码位和次优的正则表达式模式。  为了获得最佳性能,这是读者应该使用的:

function conditionally_add_scripts_and_styles($posts){
    foreach($posts as $post){
        if(preg_match('/product_id="\d/',$post->post_content)){
            wp_enqueue_style('my-style','/woocommerce.css');
            wp_enqueue_script('my-script','/script.js');
            break;
        }
    }
    return $posts;
}

我的回答和Sahil的区别是什么?

  • empty()循环之前的foreach()条件是不必要的,因为如果数组为空,foreach将不会迭代一次。
  • 不需要$shortcode_found的每个声明/使用。
  • Sahil的正则表达式模式允许匹配一系列空格字符(不仅是空格,而是制表符,换行符等),OP的样本输入没有。
  • 他的模式逃脱了=,这是不必要的,并教导了一种不必要的习惯。
  • 检查多个数字作为product_id的值是不必要的,因为如果只有一个数字,条件应正确返回true结果。由于OP已指示产品ID在格式上是完全数字的,因此无需检查整个值。如果担心全部值,那么/product_id="\d+"/就可以了。