如何编写与所有有效的西班牙语和阿拉伯语单词匹配的正则表达式。
我知道,英语为a-zA-z
,希伯来语为א-ת
,俄语为А-Яа-яёЁ
。
我使用Javascript。
答案 0 :(得分:16)
英语单词的a-zA-Z
范围简直无比,天真无邪。它遗漏了各种带有重音符号和其他特殊标记的字母,这些字母用在借词等中。例如,它与我的第一句话中的“天真”一词不符。请改用\p{Latin}
脚本。
希伯来词的范围א-ת
也是错误的。它遗漏了希伯来语的表现形式,cantillation标记,意第绪语有向图等等。请改用\p{Hebrew}
脚本。
俄语的范围А-Яа-яёЁ
再次不完整和错误。请改用\p{Cyrillic}
脚本。
西班牙字母表使用与英语相同的26个字母,加上ñÑ。但同样,不要将这些硬编码到一个范围内。许多西班牙语单词使用重音元音。使用\p{Latin}
脚本匹配西班牙语单词。正则表达不会帮助您区分西班牙语和英语。
对于阿拉伯语,请使用\p{Arabic}
脚本。
你说你正在使用JavaScript。不幸的是,JavaScript几乎不支持Unicode内置。在JavaScript中,您需要使用XRegExp library及其Unicode addon。这将允许您在正则表达式中使用我在上面提到的所有Unicode脚本。
始终支持Unicode脚本而不是Unicode块。块与特定脚本中的代码点匹配不佳。块通常会遗漏许多不完整范围之外的重要代码点,并包含许多未分配任何字符的代码点。脚本包括所有相关的代码点,不再包括。