首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jQuery验证和Regex检查文本区域的每一行以获取模式?

如何使用jQuery验证和Regex检查文本区域的每一行以获取模式?
EN

Stack Overflow用户
提问于 2015-09-04 20:41:04
回答 2查看 835关注 0票数 1

我正在尝试使用jQuery验证来进行一些表单验证。在表单中,我有一个用于序列号的textarea,在该textarea中,用户将粘贴一个特定格式的序列号,每行一个(比如从Excel复制)。我想循环遍历文本区域中的每一行,并验证每个序列号的格式是否正确。如果不是,抛出一个错误。如果所有序列号都签出,则允许表单提交。每个序列号的格式为XXXX-XXXX,其中X可以是任何数字或大写字母。

我已经完成了这一工作,使整个表单验证按照我所希望的方式工作,但它目前只检查序列号文本区域的一行,而不是循环遍历每一行,以找到格式不正确的Serial。

下面是表单代码(我使用的是ColdFusion,但这不重要):

代码语言:javascript
复制
<form name="requestForm" id="requestForm" method="post" action="">          

  <!-- Serial Numbers -->
  <label for="txtSerialNumbers">Serial Numbers
  <textarea name="txtSerialNumbers" id="txtSerialNumbers"></textarea>          

  <!-- Action Buttons -->
  <button type="submit" name="addTokens" id="addTokens" >Add Tokens</button>

</form>

下面是适用于一行的jQuery验证代码:

代码语言:javascript
复制
   <script>

        $(document).ready( function () {

            $.validator.addMethod("checkSerials", function(value, element) {  
                    if (/^[0-9A-Z]{4}(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})$/.test(value)) {       
                            return true; // pass when validation is correct
                    } else {
                            return false; // fail when validation fails
                    };
                }, "Please enter a valid Serial Number."

            );              

            $('#requestForm').validate( {       

                    rules: {
                            txtSerialNumbers: {
                                    checkSerials: true
                            }           
                    }                                               
            });

        });

    </script>

我假设我需要循环,因为我不认为Regex本身可以单独检查textarea的每一行而不需要循环,或者可以吗?我仍然在学习Javascript,所以我不知道应该把循环放在哪里,或者当循环到达一个坏的序列号时如何打破循环(如果第1行发生故障,解析整个textarea没有意义)。

提前感谢您的建议!

EN

回答 2

Stack Overflow用户

发布于 2015-09-04 21:43:55

好吧,感谢大家的帮助。特别是,感谢斯蒂芬99%的解决方案。只是做了几次调整,结果就像我想要的那样:

代码语言:javascript
复制
    $.validator.addMethod("checkSerials", function(value, element) { 

        var pattern  = /^[0-9A-Z]{4}(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})$/;             
        var allLines = $('#txtSerialNumbers').val().split('\n');                                    

            for (var i = 0; i < allLines.length; i++)
            {
                if (!pattern.test(allLines[i]))
                {
                    return false;
                 }
            }

            return true; // pass when validation is correct                     

       }, "Please enter a valid Serial Number." 

   );   
票数 1
EN

Stack Overflow用户

发布于 2015-09-04 20:49:18

在JavaScript中,可以使用var lines = $('textarea').val().split('\n')拆分新行。这将创建一个数组(有点像一个列表),其中所有的行都是“terms”。然后,您可以执行一个for循环来遍历所有这些术语:

代码语言:javascript
复制
$.each(terms, function(index, value) {
    // Do regex on value variable here for just the current line
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32406268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档