0

我需要确定提交的数据/文本<input>是否包含以下任何内容。youtube, vimeo, normal website, jpg/png,plain text

if a youtube link is found {
    //do something
  } else if a vimeo link is found {
    //do something
  } else if a normal website is found {
    //do something
  } else if a (jpg/png) is found {
    //do something
  } else  just a text {
} //do something

目前是我的语法。youtube 和 vimeo 正则表达式格式取自其他帖子。但我不确定如何为其他人创建正确的正则表达式。

我尝试了一些正则表达式生成器,但使用起来非常复杂

我也很想知道这是否是执行多个条件语句的正确方法。

$(function() {
    $(document).on('click','.submit', function () {
        var data = $('#input').val();
        var youtube = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]*).*/;
        var vimeo = /^(http\:\/\/|https\:\/\/)?(www\.)?(vimeo\.com\/)([0-9]+)$/;


        if (data.match(youtube)) {
            alert("utube");
        }
        else if (data.match(vimeo)) {
            alert("vimeo");
        }
            else if ...
    });
});
4

2 回答 2

1

有一百万种不同的方法可以做到这一点。

您需要的另一个正则表达式大致如下。如果你小写你的数据,它也会让你有点头疼

var data = $("#input").val.toLowerCase(); 

网址

/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/

PNG / JPG 在字符串的末尾

/(png|jpg|jpeg)$/

我想纯文本将是剩下的

最有效的方法也是使用 switch 语句不是很大的 if else

像这样http://www.w3schools.com/js/js_switch.asp

switch(n)
{
case 1:
  execute code block 1
  break;
case 2:
  execute code block 2
  break;
default:
  code to be executed if n is different from case 1 and 2
}
于 2013-10-21T15:46:56.180 回答
0

当您有多个正则表达式条件要检查时,我建议使用 switch 语句:

var data = $('#input').val();
var youtube = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]*).*/;
var vimeo = /^(http\:\/\/|https\:\/\/)?(www\.)?(vimeo\.com\/)([0-9]+)$/;
var normalWebsite = /^(?:ftp|http|https):\/\/(?:[\w\.\-\+]+:{0,1}[\w\.\-\+]*@)?(?:[a-z0-9\-\.]+)(?::[0-9]+)?(?:\/|\/(?:[\w#!:\.\?\+=&%@!\-\/\(\)]+)|\?(?:[\w#!:\.\?\+=&%@!\-\/\(\)]+))?$/;
var image = /<img\s+src\s*=\s*(["'][^"']+["']|[^>]+)>/;

switch (true) {
  case youtube.test(data):
    alert('youtube');
    break;
  case vimeo.test(data):
    alert('vimeo');
    break;
  case normalWebsite.test(data):
    alert('normal website');
    break;
  case image.test(data):
    alert('image');
    break;
  default:
    // Here we are assuming anything that doesn't match the above is plain text.
    // You will need an additional regex if you want to make sure this doesn't contain html or code.
    alert('Plain text');
    break;
}
于 2013-10-21T15:46:12.890 回答