Кто-нибудь готов помочь мне отфильтровать URL с помощью регулярных выражений? Я прошел довольно далеко, но наткнулся на один последний вопрос.
Сценарий:
- Пользователь отправляет ссылку на свою песню SoundCloud в Gravity. Поле веб-сайта форм.
- Сценарий автоматически объявляет https: // автоматически, если пользователь не добавляет его.
- Удаляет www. и м. из URL.
- Иногда отправляется ссылка с частным расширением URL: https://soundcloud.com/username/songtitle/s-qciX1vDI2Cq
Что можно сделать, чтобы скрипт также удалял s-qciX1vDI2Cq тоже с URL?
Пример ввода http://www.soundcloud.com/username/songtitle/s-qciX1vDI2Cq
Пример вывода https://soundcloud.com/username/songtitle
Заранее большое спасибо!
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;
}