在PHP中使用正则表达式过滤URL

在PHP中使用正则表达式过滤URL,php,regex,filter,preg-match,Php,Regex,Filter,Preg Match,有人愿意帮助我使用正则表达式过滤URL吗?我已经走了相当远的路,但我偶然发现了最后一个问题 场景: 用户在重力表单网站字段中提交其SoundCloud歌曲的链接 如果用户未添加脚本,脚本将自动添加https://广告 从URL中删除www.和m. 有时会提交带有专用URL扩展名的链接: 我能做些什么呢?脚本也会从URL中删除s-qciX1vDI2Cq 示例输入 示例输出 非常感谢 add_filter( 'gform_pre_render', 'itsg_check_website_fiel

有人愿意帮助我使用正则表达式过滤URL吗?我已经走了相当远的路,但我偶然发现了最后一个问题

场景:

  • 用户在重力表单网站字段中提交其SoundCloud歌曲的链接
  • 如果用户未添加脚本,脚本将自动添加https://广告
  • 从URL中删除www.m.
  • 有时会提交带有专用URL扩展名的链接:
  • 我能做些什么呢?脚本也会从URL中删除s-qciX1vDI2Cq

    示例输入

    示例输出

    非常感谢

    add_filter( 'gform_pre_render', 'itsg_check_website_field_value' );
    add_filter( 'gform_pre_validation', 'itsg_check_website_field_value' );
    function itsg_check_website_field_value( $form ) {
        foreach ( $form['fields'] as &$field ) {  // for all form fields
            if ( 'website' == $field['type'] || ( isset( $field['inputType'] ) && 'website' == $field['inputType']) ) {  // select the fields that are 'website' type
                $value = RGFormsModel::get_field_value($field);  // get the value of the field
    
                if (! empty($value) ) { // if value not empty
                    $field_id = $field['id'];  // get the field id
    
                    if (! preg_match("~^(?:f|ht)tps?://~i", $value) ) {  // if value does not start with ftp:// http:// or https://
                        $value = "https://" . $value;  // add https:// to start of value
                    }
    
                    if ( preg_match("/(https?:\/\/)(www\.|m\.)?soundcloud\.com\/([^\s\n]+)\/([^\s\n]+)\/([^\s\n]+)", $value)) {
                        $temp = explode("/", $value);
                        array_pop($temp);
                        $value = implode("/", $temp);
                    }
    
    
                    preg_match("/(https?:\/\/)(www\.|m\.)?([^\s\n]+)(\/+)?/", $value, $extractedDomain);
                    $value = "https://" . $extractedDomain[3];
    
                    preg_match('/^(.*?)(\?.*)?$/', $value, $noSearch);
                    $value = trim($noSearch[1], '/') . '';
    
                    $_POST['input_' . $field_id] = $value; // update post with new value
                }
            }
        }
        return $form;
    }
    

    我会选择正则表达式“//”

    $url = 'http://www.soundcloud.com/username/songtitle/s-qciX1vDI2Cq';
    $regex = '/\//';
    $a = preg_split($regex, $url);
    print_r($a);
    
    输出:

    Array
    (
        [0] => http:
        [1] =>
        [2] => www.soundcloud.com
        [3] => username
        [4] => songtitle
        [5] => s-qciX1vDI2Cq
    )
    

    现在,您可以将这些元素从0到4连接起来,以提供正确的url。

    使用regex模式

    ^(?:https?:\/\/|)(?:www|m)\.(soundcloud\.com\/[^\/]+\/[^\/]+)(?:\/.*?|)$
    
    并用

    http://$1
    
    测试它,请参见中的说明(右上角)


    请参见

    要在可选
    www.
    m.
    前缀和/或
    soundcloud.com
    域名中接受大写字母,请添加
    i
    regex修饰符:

    /^(?:https?:\/\/|)(?:www|m)\.(soundcloud\.com\/[^\/]+\/[^\/]+)(?:\/.*?|)$/i
    
    /^(?:https?:\/\/|)(?:www|m)\.(soundcloud\.com\/[^\/]+\/[^\/]+)(?:\/.*?|)$/i