You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:54:03