我想要做的Node.js的一些基本字符串测试 假设我有,用户输入他们的名字,我想检查,如果它只是垃圾或实名的形式。
令人高兴的是(或不幸的是我的检查)我得到用户来自世界各地,这意味着它们的名称中包含非英文字符,如ä ö ü ß é
。 我以前用/[A-Za-z -]{2,}/
但这并不匹配名称类似"Jan Buschtöns"
我必须每一个可能的非英语,但拉丁字符手动添加到我的正则表达式来工作吗? 我不想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}_]
然后。
答案取决于你想要做什么。
正如您已经注意到, [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范围之外的非字母都包括在内。
以上可能是你的目的不够好,但如果不是,那么你将不得不找出哪些字符范围需要并指定那些明确。