在PHP中使用正则表达式过滤URL
有人愿意帮助我使用正则表达式过滤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
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