javascript - 用于验证文本区域输入的正则表达式,该输入必须是由换行符分隔的 URL

标签 javascript regex google-forms

我正在尝试创建一个正则表达式,最终将与 Google Forms 一起使用来验证 texarea 输入。

规则是,

  • 输入区域可以有一个或多个网址(http 或 https)
  • 每个网址必须由一个或多个换行符分隔
  • 每一行包含文本,必须是一个有效的 URL
  • 最后一个网址后面可能有也可能没有换行符

到目前为止,我已经编写了这个正则表达式 ^(https?://.+[\r\n]+)*(https?://.+[\r\n]+?)$ 但问题是,如果一行有超过 1 个 url,它也会验证

这是我的测试 field :http://goo.gl/YPdvBH .

最佳答案

这就是您要找的内容

Demo Demo with your URLS

    function validate(ele) {
        str = ele.value;
        str = str.replace(/\r/g, "");
        while (/\s\n/.test(str)) {
            str = str.replace(/\s\n/g, "\n");
        }
        while (/\n\n/.test(str)) {
            str = str.replace(/\n\n/g, "\n");
        }
        ele.value = str;

        str = str.replace(/\n/g, "_!_&_!_").split("_!_&_!_")

        var result = [], counter = 0;

        for (var i = 0; i < str.length; i++) {
            str[i] = str[i].replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g, '').replace(/\s+/g, ' ');
            if(str[i].length !== 0){
            if (isValidAddress(str[i])) {
                result.push(str[i]);
            }
            counter += 1;
            }
        }

        function isValidAddress(s) {
            return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(s)
        }
        return (result.length === str.length);
    }
    var ele = document.getElementById('urls');
    validate(ele);

关于javascript - 用于验证文本区域输入的正则表达式,该输入必须是由换行符分隔的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20137313/

相关文章:

javascript - Dojo Datagrid 总是显示过时的数据

javascript - AngularJS 中的重型 Controller 通信

c++ - 如何从 C++ 中的一串科学数字中删除后面的零

regex - Perl:正则表达式模式内的条件代码执行

google-apps-script - 在 Google 脚本中指定要保存文件的文件夹

google-apps-script - 通过谷歌脚本更改表单调色板

javascript - 将事件监听器添加到 Canvas

javascript - iPad 方向改变后页面元素放置不当

javascript 验证电话

google-apps-script - 以编程方式复制对两个 Google 表格的表单响应