如何使用Swift检测任意语言字符串中非对应语种字母的内容
多语种合法字符检测实现方案
以下两种方案均无需手动录入各语种字母表,可直接实现你要的校验逻辑:
方案1:基于Unicode脚本属性检测(通用、轻量,推荐)
Unicode标准为每个字符分配了所属的「脚本(Script)」属性,你可以直接通过匹配字符的脚本属性完成校验:
- 英语、意大利语、法语等使用拉丁字母的语种,对应脚本属性为
Latin - 阿拉伯语对应脚本属性为
Arabic - 空格、常用标点这类通用字符可单独维护白名单,按需调整允许范围
如果需要对同脚本下的不同语种做更细的限制(比如英语不允许土耳其语的Ş、Ğ,法语允许带声调的拉丁字符),可以搭配Unicode字符区块属性过滤,全程不需要自己维护全量字母表。
Python示例代码(需安装unicodedata2兼容旧版本Python,3.13+版本可直接用标准库unicodedata):
import unicodedata2 as unicodedata # 自定义通用允许字符,按需增减 ALLOWED_COMMON = {' ', '.', ',', '!', '?', '-'} def check_string(s: str, target_script: str) -> bool: for c in s: if c in ALLOWED_COMMON: continue if unicodedata.script(c) != target_script: return False return True
调用示例:
- 英语场景:
check_string("thisŞĞstring", "Latin")返回False - 阿拉伯语场景:
check_string("كلمةabc", "Arabic")返回False
方案2:使用预封装的多语种校验库(适合需要细粒度区分同脚本不同语种的场景)
如果需要精确区分同属拉丁脚本的英语、法语、意大利语的合法字符范围,直接用已经封装好各语种字母表的第三方库即可,不需要自己整理字符集:
- Python生态可选
polyglot、langdetect的配套字符校验模块 - JavaScript生态可选
cldrjs、unicode-properties相关封装
Python示例代码(使用polyglot):
from polyglot.text import Text ALLOWED_COMMON = {' ', '.', ',', '!', '?', '-'} def check_lang_string(s: str, lang_code: str) -> bool: lang_alphabet = Text('', hint_language_code=lang_code).language.alphabet for c in s: if c in ALLOWED_COMMON: continue if c not in lang_alphabet: return False return True
调用示例:
- 英语场景:
check_lang_string("corect string format", "en")返回True - 法语场景:传入带é、à的字符串也会返回
True,自动适配法语的合法变音字符
边界注意事项
- 数字、特殊符号的允许范围根据业务需求自行调整白名单即可
- 生僻小语种字符校验建议升级Unicode依赖到最新版本,避免识别错误
- 如果有部分场景允许少量混用其他脚本字符,单独加例外规则即可
内容的提问来源于stack exchange,提问作者ursan526
相关产品推荐
相关产品推荐

