You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Swift技术问询:如何校验字符串适配多语言应用昵称且不含标点数字

适配多语言显示名称校验的解决方案

你好!要让这个校验函数支持所有语言的文字,同时禁止数字和标点符号,我们可以利用Swift内置的Unicode字符集分类来实现,不用再硬编码英文字母范围。下面是改进后的方案:

优化后的代码

func isSuitableForDisplayName(inputString: String) -> Bool {
    // 先移除所有空白字符(和原逻辑保持一致,避免全空格的无效输入)
    let mergedString = inputString.replacingOccurrences(of: "\\s", with: "", options: .regularExpression)
    
    // 允许的字符:所有Unicode标准中的字母/表意文字(覆盖全球所有语言)
    let allowedChars = CharacterSet.letters
    // 明确禁止的字符:数字、标点、符号、空白(双重保险)
    let forbiddenChars = CharacterSet.decimalDigits
        .union(.punctuationCharacters)
        .union(.symbols)
        .union(.whitespacesAndNewlines)
    
    // 校验逻辑:没有非允许字符,同时没有禁止字符,且处理后字符串非空
    guard mergedString.rangeOfCharacter(from: allowedChars.inverted) == nil,
          mergedString.rangeOfCharacter(from: forbiddenChars) == nil,
          !mergedString.isEmpty else {
        return false
    }
    
    return true
}

核心逻辑说明

  • CharacterSet.letters:这个集合包含了所有Unicode定义的字母类字符,不管是中文、日文、韩文、俄文、阿拉伯文还是欧洲小语种的字母,都能被正确识别,完美解决多语言支持的问题。
  • 我们主动合并了所有需要禁止的字符类型:数字、标点、各类符号以及空白字符,确保这些内容完全无法通过校验。
  • 额外增加了非空检查,避免用户输入全空格这类无效内容(原逻辑中如果输入全空格,处理后是空字符串,这里直接返回false更合理)。
  • 原代码里的stringByRemovingWhitespaces是自定义方法,这里用系统的正则替换实现了更通用的空白移除,兼容性更好。

测试用例参考

  • ✅ 有效输入:"张三""Luna""タロウ""Александр"
  • ❌ 无效输入:"Li4""Anna!""홍길동-"" "

内容的提问来源于stack exchange,提问作者iamburak

火山引擎 最新活动