javascript - 从字符串中删除不是名字/姓氏字符的字符
问题描述
请看下面的代码:
@HostListener('paste', ['$event'])
onPaste(event) {
var test = event.clipboardData.getData('text');
var removedNumbers = test.replace(/[0-9]/g, '');
}
数字将从粘贴的文本中删除。它是一个姓氏字段,因此还应排除 {[}] 等字符。
如何删除对名称无效的字符?我今天读了很多类似的问题,例如:如何使用 jquery 阻止或限制输入字段中的特殊字符?. 但是,我还没有找到我的具体问题的答案。
解决方案
[^ ]
匹配未包含在括号中的任何内容(包括空格),因此您可以将所有不想被删除的字符放在括号内。但是请注意,如果特殊字符是匹配的一部分,则必须对其进行转义。另请注意
您可以使用连字符指定字符范围,但如果连字符出现在方括号中的第一个或最后一个字符,则它被视为文字连字符,作为普通字符包含在字符集中。
const regex = /[^a-z,' -]/gi;
console.log("Conan O'Brien".replace(regex, ''));
您还可以对非英文名称使用 Unicode 字符范围,例如
- 对于中国人
4e00 to 9fa5
, - 对于大部分拉丁语
0061 to 007A & 00DF to 00F6 & 00F8 to 01BF & 01C4 to 024F
- 为吉兹
1200 to 135A
const regexLatin = /[^\u0061-\u007A\u00DF-\u00F6\u00F8-\u01BF\u01C4-\u024F ]/gui;
const regexChina = /[^\u4e00-\u9fa5 ]/gui;
const regexGeez = /[^\u1200-\u137F ]/gui;
console.log("Björk Guðmundsdóttir".replace(regexLatin, ''));
console.log("陳港生".replace(regexChina, ''));
console.log("ምኒልክ".replace(regexGeez, ''));
但是,这不是一个详尽的列表,您可以参考List_of_Unicode_characters以根据您的特定需要进行调整。
尝试匹配来自“所有”语言的所有名称可能非常困难。然而,好消息是Unicode_Property_Escapes是 ECMAScript 2020 规范(目前处于草案阶段)的一部分,这将大大简化流程。例如,要匹配拉丁字符,您可以使用:/\p{Script=Latin}/u
;要匹配来自“所有”语言的字母,您可以使用:/\p{Letter}/gu
或缩写形式/\p{L}/gu
推荐阅读
- javascript - 如何将 localStorage 迁移到 AsyncStorage
- python - 带有 plac 的可选参数的默认值和非默认值
- jquery - 在jquery中单击按钮时添加元素并增加索引值
- python - 如果行存在,Django 更新行
- html - 在 HTML 中,div 标签如何用空格替换换行符和制表符空格/空格键
- android - 如何以编程方式检测android中的袖珍模式
- linux - 无法在 CentOS 中使用 docker run 命令
- php - php_network_getaddresses:getaddrinfo 失败:不知道这样的主机
- c# - 我的模型的所有属性在 post 方法中都是 null
- django - 简单的站点搜索 django