如何为Swift编写验证合法用户名的正则表达式?
Swift 合法用户名正则验证方案
针对你提出的用户名规则,我整理了完全匹配的正则表达式,以及在Swift中的实际使用示例:
正则表达式说明
先直接给出符合所有要求的正则:
^[a-zA-Z0-9_]{1,13}$
拆解下每个部分的作用:
^:匹配字符串的起始位置,确保用户名从有效字符开始[a-zA-Z0-9_]:允许的字符集合——大小写英文字母、数字、下划线,刚好满足你“允许下划线,无特殊字符和空格”的要求{1,13}:限制字符长度在1到13之间(包含两端)$:匹配字符串的结束位置,避免用户名前后出现隐藏的无效字符(比如空格)
Swift 代码示例
在Swift中,你可以通过两种常见方式来验证:
方式1:使用 NSRegularExpression(更灵活,适合复杂场景)
func isValidUsername(_ username: String) -> Bool { let regexPattern = "^[a-zA-Z0-9_]{1,13}$" guard let regex = try? NSRegularExpression(pattern: regexPattern) else { return false } let range = NSRange(username.startIndex..., in: username) // 检查是否有且仅有一个完整匹配(整个字符串都符合规则) return regex.numberOfMatches(in: username, range: range) == 1 } // 测试示例 print(isValidUsername("User_123")) // true print(isValidUsername("TooLongUsername1234")) // false(长度超过13) print(isValidUsername("User@Name")) // false(包含特殊字符@) print(isValidUsername("User Name")) // false(包含空格)
方式2:使用 NSPredicate(更简洁,适合简单验证)
func isValidUsername(_ username: String) -> Bool { let regexPattern = "^[a-zA-Z0-9_]{1,13}$" let predicate = NSPredicate(format: "SELF MATCHES %@", regexPattern) return predicate.evaluate(with: username) }
额外说明
- 如果后续需要支持中文用户名,只需要调整字符集即可,但根据当前要求这里仅保留了字母、数字和下划线
- 若要区分大小写(比如只允许小写字母),可以把
[a-zA-Z]改成[a-z],默认NSRegularExpression是区分大小写的,如需不区分可添加.caseInsensitive选项
内容的提问来源于stack exchange,提问作者frankcrest
相关产品推荐
相关产品推荐

