我有点无聊,想出了一个可笑的笨重,虽然相对简单和实用的 jQuery 方法:
$('form').submit(
function() {
var text = $('#text').val().split(' ');
for (i = 0; i < text.length; i++) {
var test = text[i].indexOf('http://www.youtube.com/watch');
if (test != -1) {
text[i] = '[youtube=' + text[i] + ']';
}
}
text = text.join(' ').trim();
$('#text').val(text);
return false;
});
JS Fiddle demo.
编辑为函数添加必要的健全性检查:
$('form').submit(
function() {
var text = $('#text').val().split(' ');
for (i = 0; i < text.length; i++) {
var test = text[i].indexOf('http://www.youtube.com/watch');
var check = text[i].indexOf('[youtube=');
if (test != -1 && check == -1) {
text[i] = '[youtube=' + text[i] + ']';
}
}
text = text.join(' ').trim();
$('#text').val(text);
return false;
});
JS Fiddle of sanity-checking demo.
基本上,在第一个函数中,可以简单地继续重新提交表单并在前面加上“[youtube=”并附加一个结束“]”。后一种方法使我摆脱了一些愚蠢。当然,我可以检查“test”的indexOf() 值是否等于0,所以它位于字符串的开头。如果我重新审视这个,我可能会这样做。
已编辑,因为有时候,我就是不能让事情继续……
$('form').submit(
function() {
var text = $('#text').val().split(' ');
for (i = 0; i < text.length; i++) {
var test = text[i].indexOf('http://www.youtube.com/watch');
if (test === 0) {
text[i] = '[youtube=' + text[i] + ']';
}
}
text = text.join(' ').trim();
$('#text').val(text);
return false;
});
Updated JS Fiddle demo.
Edited (再次)因为我不能让事情保持原样,并且因为我(在 cmets 中)认为 jQuery 示例应该在 php 中可行(或多或少直接)。所以这里是:
$text = $_POST['text']; // from the textarea of name="text"
$text = explode(" ",$text);
for ($i=0; $i < count($text); $i++) {
if (stripos($text[$i], 'http://www.youtube.com/watch') === 0) {
$text[$i] = '[youtube=' . $text[$i] . ']';
}
}
$text = implode(" ",$text);
我不知道有什么地方可以公开且安全地主持 php 演示,所以我无法演示这个,但我认为它应该 工作。尽管使用foreach() 可能比for() 循环更容易。