Angular中正则验证有效但replace替换无效问题咨询
问题原因及解决方案
你的正则表达式/^[a-zA-Z0-9ñÑ., ]*$/在输入验证中有效,是因为它用来判断整个字符串是否全部由合法字符组成(比如用test()方法时,只要字符串里全是允许的字符就返回true),但在replace里这么用完全不符合需求。
核心问题
这个正则用了^(字符串开头)和$(字符串结尾)锚定,意思是只有当整个粘贴的文本完全匹配合法字符集合时,才会把整个文本替换为空。而你需要的是清理掉文本里的非法字符,所以这个正则逻辑完全搞反了。
修复代码
把正则改成匹配非法字符并全局替换,代码修正如下:
onPasteCustom($event: any) { $event.preventDefault(); let text = $event.clipboardData.getData('text/plain'); // 匹配所有不在合法集合里的字符,全局替换为空 const cleanText = text.replace(/[^a-zA-Z0-9ñÑ., ]/g, ''); this.form.controls['detail'].setValue(cleanText); }
修正说明
[^a-zA-Z0-9ñÑ., ]:^在字符集里表示取反,意思是匹配不在合法字符列表里的任意字符g标志:开启全局匹配,会替换文本中所有的非法字符,而不是只替换第一个匹配到的
内容的提问来源于stack exchange,提问作者Alonso Contreras
相关产品推荐
相关产品推荐

