bus*_*ens 11 javascript regex utf-8 node.js
我想在Node.js中做一些基本的字符串测试.假设我有一个表格,用户输入他们的名字,我想检查它是垃圾还是真名.
令人高兴的(或者可悲的是我的支票)我从世界各地获得用户,这意味着他们的名字包含非英文字符,例如ä ö ü ß é.我习惯使用,/[A-Za-z -]{2,}/但这与名字不匹配"Jan Buschtöns".
我是否必须手动将每个可能的非英语但拉丁字符添加到我的RegEx才能工作?我不希望RegEx喜欢100多个字符/[A-Za-z -äöüÄÖÜßéÉèÈêÊ...]{2,}/.
查看http://www.regular-expressions.info/unicode.html和http://xregexp.com/plugins/
\p{L}如果要包含unicode,则需要使用匹配任何字母字符.
说到unicode的,替代\w的[\p{L}\p{N}_]则.
更新:从 ES2018 开始,JavaScript 支持 Unicode 属性转义,例如\p{L},它匹配任何 Unicode 认为是字母的东西。所有现代浏览器都支持此功能,因此只要您不关心古代浏览器,这可能是可行的方法。
ES2018 之前的浏览器的旧答案:
答案完全取决于您想要做什么。
正如您所注意到的,[A-Za-z]只匹配没有变音符号的拉丁字母。
如果您只关心德语变音符号和ß连字,那么您可以将该部分替换为[A-Za-zÄÖÜäöüß],例如:
/[A-Za-zÄÖÜäöüß -]{2,}/
Run Code Online (Sandbox Code Playgroud)
但这可能不是您想要做的。您可能希望将拉丁字母与任何变音符号相匹配,而不仅仅是德语中使用的那些。或者,您可能想匹配任何字母表中的任何字母,而不仅仅是拉丁字母。
其他正则表达式方言有字符类可以帮助您解决此类问题,但不幸的是,JavaScript 的正则表达式方言字符类很少,并且没有一个可以帮助您。
(如果您不知道,“字符类”是一种与属于预定义字符组成员的任何字符相匹配的表达式。例如,\w是与任何 ASCII 字母、数字或下划线,并且.是匹配任何字符的字符类。)
这意味着您必须列出与要匹配的字符对应的每个 UTF-16 代码单元范围。
一个快速而肮脏的解决方案可能是说[a-zA-Z\u0080-\uFFFF],或者完全:
/[A-Za-z\\u0080-\\uFFFF -]{2,}/
Run Code Online (Sandbox Code Playgroud)
这将匹配 ASCII 范围内的任何字母,但也会匹配 ASCII 范围之外的任何字符。这包括任何脚本中带有或不带有变音符号的所有可能的字母字符。但是,它还包括许多不是字母的字符。ASCII 范围内的非字母被排除,但包括 ASCII 范围之外的非字母。
上面的内容可能足以满足您的目的,但如果不是,那么您将必须弄清楚您需要哪些字符范围并明确指定这些范围。
小智 7
如果您只需要拉丁字母,包括那些不太常见的变音符号,例如\xc3\xa5\xc4\x93\xc4\xaf,但不包括中文、梵文和西里尔字符,则可以\\p{Script=Latin}与u标志一起使用。此功能称为Unicode 属性转义,在 ES2018 中引入。
例如,/\\p{Script=Latin}+/u将匹配仅包含拉丁字符的单词。
| 归档时间: |
|
| 查看次数: |
17053 次 |
| 最近记录: |