首页 > 解决方案 > 从字符串中删除不是名字/姓氏字符的字符

问题描述

请看下面的代码:

 @HostListener('paste', ['$event'])
  onPaste(event) {
    var test = event.clipboardData.getData('text');
    var removedNumbers = test.replace(/[0-9]/g, '');
  }

数字将从粘贴的文本中删除。它是一个姓氏字段,因此还应排除 {[}] 等字符。

如何删除对名称无效的字符?我今天读了很多类似的问题,例如:如何使用 jquery 阻止或限制输入字段中的特殊字符?. 但是,我还没有找到我的具体问题的答案。

标签: javascriptangular

解决方案


[^ ]匹配未包含在括号中的任何内容(包括空格),因此您可以将所有不想被删除的字符放在括号内。但是请注意,如果特殊字符是匹配的一部分,则必须对其进行转义。另请注意

您可以使用连字符指定字符范围,但如果连字符出现在方括号中的第一个或最后一个字符,则它被视为文字连字符,作为普通字符包含在字符集中。

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


推荐阅读