<textarea name="test">
http://google.com/
https://google.com/
www.google.com/
[url=http://google.com/]google.com[/url]
text
</textarea>
我目前正在尝试检查textarea中是否有网址。
if ($('textarea[name="test"]').val().indexOf('[url') >= 0 ||
$('textarea[name="test"]').val().match(/^http([s]?):\/\/.*/) ||
$('textarea[name="test"]').val().match(/^www.[0-9a-zA-Z',-]./)) {
这似乎不能完全用于检查上面的任何URL - 我想知道如何优化它。目前看起来非常草率和黑客攻击,希望有人可以提供一些见解。
我目前尝试从textarea中删除网址:
var value = $('textarea[name="test"]').val();
value = value.replace(/\[\/?url([^\]]+)?\]/g, '');
$('textarea[name="test"]').val(value);
现在,它将输出:
<textarea>
http://google.com/
https://google.com/
www.google.com/
google.com
text
</textarea>
我想要的输出是什么:
<textarea>
text
</textarea>
答案 0 :(得分:6)
尝试(评论后更正和改进):
value = value.replace(/^(\[url=)?(https?:\/\/)?(www\.|\S+?\.)(\S+?\.)?\S+$\s*/mg, '');
从最终到开始剥离表达式:
这个表达式没有强制执行完整正确的语法,这是一个更难写的正则表达式 您可能需要一些改进:
1.空间意识
value = value.replace(/^\s*(\[\s*url\s*=\s*)?(https?:\/\/)?(www\.|\S+?\.)(\S+?\.)?\S+\s*$\s*/mg, '');
2.最后一部分没有点
value = value.replace(/^(\[url=)?(https?:\/\/)?(www\.|\S+?\.)(\S+?\.)?[^.\s]+$\s*/mg, '');
答案 1 :(得分:2)
关于您是否尝试检查textarea中是否有网址。
if ($('textarea[name="test"]').val().indexOf('[url') >= 0 ||
$('textarea[name="test"]').val().match(/^http([s]?):\/\/.*/) ||
$('textarea[name="test"]').val().match(/^www.[0-9a-zA-Z',-]./)) {
首先,不是使用多个函数调用三次获得textarea值,而是在检查之前将其存储在变量中,即
。var value = $('textarea[name="test"]').val();
由于/^http([s]?):\/\/.*/
,^
只会在textarea值的开头找到“http:// ...”时匹配。这同样适用于^www.
。将多行标记m
添加到正则表达式的末尾会使^
与每行的开头匹配,而不仅仅是字符串的开头。
.*
中的/^http([s]?):\/\/.*/
没有任何意义,因为它匹配零个或多个字符。 ([s]?)
更好s?
。
在/^www.[0-9a-zA-Z',-]./
中,.
需要转义以匹配文字.
,如果这是您的意图,即\.
,我认为您的意思是匹配更多而不是字符类中的一个字符,因此您需要使用+
来跟随它。
当不需要实际匹配时,使用RegExp test
方法而不是match
更有效,因此,结合上述内容,您可以拥有
if ( /^(\[url|https?:\/\/|www\.)/m.test( value ) ) {
如果您只是使用它来决定是否需要拨打replace
,那么支票中没有任何意义,因为支票隐含在replace
电话本身
使用简单的条件,应该删除行首和以http[s]://
,[url
或www.
开头的非空格字符串,您可以使用
value = value.replace( /^(?:https?:\/\/|\[url|www\.)\S+\s*/gm, '' );
如果网址可以显示在任何位置,您可以使用\b
,意为字边界,而不是^
,并删除m
标记。
value = value.replace( /(?:\bhttps?:\/\/|\bwww\.|\[url)\S+\s*/g, '' );
尝试提供更好的正则表达式解决方案将是一种浪费,而没有关于文本区域中可能出现的URL形式的详细细节,它们可能出现在哪里以及哪些字符可能与它们相邻。
如果任何有效网址可以在textarea中的任何地方出现,并且被任何其他字符所包围,而不是没有防水解决方案。
答案 2 :(得分:1)
下面的JQuery
代码将完成任务
<script>
// disable links in textarea and add class linkdisable in textarea
jQuery('.linkdisable').focusout(function(e){
var message = jQuery('.linkdisable').val();
if(/(http|https|ftp):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/i.test($(this).val())){
alert('Links Not Allowed');
e.preventDefault();
}
else if (/^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$/i.test($(this).val())) {
alert('Links Not Allowed');
e.preventDefault();
}
});
</script>