为什么用于验证URL的正则表达式在MVC视图中不起作用,尽管它在在线正则表达式测试器上工作正常

时间:2014-12-08 13:21:34

标签: jquery regex

我正在尝试验证URL字段,我使用了regex,它在线工作正常但在我的视图(脚本)中每次都会得到true结果。以下是我的代码。

 $('.text-attribute.gt_2_').blur(function () {


        var urlRegExp = /^(ftp:\/\/|http:\/\/|https:\/\/)?(\w+:{0,1}\w*@@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@@!-\/]))?$/;

        //var urlRegExp = new RegExp("((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@@.\w_]*)#?(?:[\w]*))?)");
        var url = $(this).val();
        alert(url);
        var result = urlRegExp.test(url);
        alert(result);

        if ($.trim($(this).val()) != "" && urlRegExp.test($(this).val())==false) {
            alertBox("Please provide valid website address.");
            $(this).val('');
            $(this).focus();
        }


    });

1 个答案:

答案 0 :(得分:1)

你的正则表达式使大多数组都是可选的,几乎每次都给出了

<强>正则表达式

/^(ftp:\/\/|http:\/\/|https:\/\/)?(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!-\/]))?$/;

让我们分手,你有5组

  1. (ftp:\/\/|http:\/\/|https:\/\/)?是可选的

  2. (\w+:{0,1}\w*@)?是可选的

  3. (\S+)寻找一些非空间

  4. (:[0-9]+)?是可选的

  5. (\/|\/([\w#!:.?+=&%@!-\/]))?再次可选

  6. 所以,为了简化你的表达,你正在寻找一些非空格字符。