不要在angularjs的textarea中输入超过20个逗号分隔或换行符分隔的序列号和字母数字

Posted

技术标签:

【中文标题】不要在angularjs的textarea中输入超过20个逗号分隔或换行符分隔的序列号和字母数字【英文标题】:Don't Input more than 20 comma separated or new-line separated serial no and alpha-numeric in textarea in angularjs 【发布时间】:2020-10-27 07:42:23 【问题描述】:

这是我的问题陈述。任何帮助都会很棒。

允许用户在文本区域中输入文本,但有以下限制。

只允许输入字母数字(序列号)。

只有 20 个条目(可以用逗号分隔,如 FVO01、FVO02、FVO03 ..) 或类似的新行 FVO01. FVO02. FVO03等

用户可以从记事本或 Excel 表中复制和粘贴,因此在这样做时 2 个序列号之间可能会有超过 1 个新行,因此也必须注意这一点。

我的方法: 首先修剪所有空格。 用逗号 (,) 替换所有新行 (/n) 字符。如果它已经是逗号分隔的条目,则转换不会影响任何内容。 计算长度,如果超过 20 则提示。

这是我到目前为止所尝试的,不知何故捕获和替换新行不起作用。

寻找满足上述所有条件的更好解决方案。谢谢

function checkValidations(newValue) 
                    $ctrl.serialNos = newValue;
                    
                    var comma = "";                     
                    if($ctrl.serialNos) 
                    comma = $ctrl.serialNos.replace(/\s/g, "");
                    comma = $ctrl.serialNos.replace(/\n/g, ",");
                    comma = comma.split(",");
                    
                    
                    var alphaNumeric = /^[(a-z)(A-Z)(0-9),]+$/;
                    if($ctrl.serialNos) 
                    if(!($ctrl.serialNos.match(alphaNumeric))) 
                        alert("Please enter only Alphanumeric values")
                        
                    
                    
                    if (comma.length > 21 )                            
                        alert("You can not enter More than 20 serial nos");
                    

【问题讨论】:

请尝试console.log(string2.split(/\n|,/g).length <= 20 && /[A-Za-z0-9]+/.test(string2.replace(/[\s\n,]+/g, ""))); 它现在将 /n 转换为逗号,但我根据逗号计算序列号。因此,如果在 2 个序列号之间有多个 /n(比如说 3),那么它将转换为 3 个逗号,虽然我有 2 个序列号,但我的序列号总数将为 5,这将影响我的验证。它不允许我在 17 个序列号之后输入。任何解决方法 好的,您想将新行转换为逗号吗?请检查此\n+。请注意那里有逗号。 谢谢,这有助于解决我的问题 我很高兴它有帮助=)请考虑支持下面提供的答案。它会帮助回答者。 【参考方案1】:

您可以匹配一个字母数字条目,并重复 0 - 19 次字母数字条目,前面可以有 1 个或多个换行符或逗号

^[a-zA-Z0-9]+(?:(?:[\r\n]+|,)[a-zA-Z0-9]+)0,19$

说明

^ 字符串开始 [a-zA-Z0-9]+ 匹配任何列出的 1 次以上(字母数字条目) (?:非捕获组 (?:[\r\n]+|,) 匹配 1+ 换行符或单个逗号 [a-zA-Z0-9]+ 匹配列出的任何字符的 1 次以上 )0,19关闭非捕获组并重复0-19次 $ 字符串结束

Regex demo

您可以使用test 来检查输入是否有效

if (!pattern.test(s)) 
    // ...

【讨论】:

【参考方案2】:

\s 匹配所有空格,包括新行,因此您需要先替换新行。

comma = $ctrl.serialNos.replace(/\n+/g, ",");
comma = comma.replace(/\s/g, "");

【讨论】:

它现在将 /n 转换为逗号,但我根据逗号计算序列号。因此,如果在 2 个序列号之间有多个 /n(比如说 3),那么它将转换为 3 个逗号,虽然我有 2 个序列号,但我的序列号总数将为 5,这将影响我的验证。它不允许我在 17 个序列号之后输入。任何解决方法 @Saket 没问题。

以上是关于不要在angularjs的textarea中输入超过20个逗号分隔或换行符分隔的序列号和字母数字的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:$http.post 使用 textarea 的多个值?

AngularJS 无法设置值 textarea

在 Textarea 中,一些单词会自动变成超链接(summernote)

angularjs textarea 剩余字数统计

在textarea元素Angularjs中触发oncontextmenu事件

使用 Laravel 在 AngularJS 的 textarea 中追加文本