与扩展拉丁字母的正则表达式(A○üèSS)(RegEx with extended latin al

2019-07-30 15:42发布

我想要做的Node.js的一些基本字符串测试 假设我有,用户输入他们的名字,我想检查,如果它只是垃圾或实名的形式。

令人高兴的是(或不幸的是我的检查)我得到用户来自世界各地,这意味着它们的名称中包含非英文字符,如ä ö ü ß é 。 我以前用/[A-Za-z -]{2,}/但这并不匹配名称类似"Jan Buschtöns"

我必须每一个可能的非英语,但拉丁字符手动添加到我的正则表达式来工作吗? 我不想100+字符正则表达式像/[A-Za-z -äöüÄÖÜßéÉèÈêÊ...]{2,}/

Answer 1:

检查http://www.regular-expressions.info/unicode.html和http://xregexp.com/plugins/

你可能会需要使用\p{L}匹配任何字母字符,如果你想包括Unicode。

说到unicode的,替代\w[\p{L}\p{N}_]然后。



Answer 2:

答案取决于你想要做什么。

正如您已经注意到, [A-Za-z]仅匹配没有变音符号的拉丁字母。

如果你只关心德国的变音符号和SS结扎线,那么你可以替换的那部分[A-Za-zÄÖÜäöüß]如:

/[A-Za-zÄÖÜäöüß -]{2,}/

但是,这可能不是你想要做什么。 你可能想与任何变音符号,而不仅仅是那些在德国使用的匹配拉丁字母。 或者你想从任何字母,而不仅仅是拉丁匹配任何字母。

其他的正则表达式方言有字符类来帮助你这样的问题,但不幸的是JavaScript的正则表达式方言有极少数的字符类,没有他们的帮助你在这里。

(在不知道的情况下,一个“字符类别”是即字符的预定组的成员的任何字符匹配的表达式。例如, \w是匹配任何ASCII字母,数字或字符类,或下划线,和.是,任何字符相匹配的字符类。)

这意味着,你必须列出的UTF-16编码单元的每个范围对应于要匹配的字符。

一个快速和肮脏的解决方案,他们会说[a-zA-Z\u0080-\uFFFF]或全部:

/[A-Za-z\\u0080-\\uFFFF -]{2,}/

这将匹配在ASCII范围内的任何字母,同时也将匹配任何字符,在所有的是ASCII范围之外。 这包括有或没有任何文字变音符号所有可能的字母字符。 然而,它也包括了很多不属于字母字符。 在ASCII范围内的非字母被排除在外,但ASCII范围之外的非字母都包括在内。

以上可能是你的目的不够好,但如果不是,那么你将不得不找出哪些字符范围需要并指定那些明确。



文章来源: RegEx with extended latin alphabet (ä ö ü è ß)