【问题标题】:Swift 2 - Regex validate User NameSwift 2 - 正则表达式验证用户名
【发布时间】:2015-11-19 10:40:05
【问题描述】:

我正在尝试使用正则表达式快速验证用户名。如果有任何非世界或数字字符,我找到了匹配字符串的方法但是,我需要找到在正则表达式中添加一个表达式的方法,该表达式告诉我字符串长度在2...15 字符的范围之间。

我该怎么做?

let name = Anthony 
if let match = name.rangeOfString("[\\W]|[\\d]{2,15}$", options: .RegularExpressionSearch) {
    print(match)
}

【问题讨论】:

  • 谢谢!这仅适用于数字
  • 试试"^(?:[\\p{L}\\p{M}]|\\d){2,15}$"。请注意,\p{L} 匹配 Unicode 字母,\p{M} 匹配变音符号。 \d 将匹配一个数字。当我们将它们全部放入一个字符类时,我们匹配一个(预先组合的)字母或一个数字,2 到 15 次。
  • 谢谢#stribizhev,但是这可行,我该怎么做相反的事情?如果字符串为 15,则表达式需要匹配 ----- !{2,15}

标签: regex string swift2


【解决方案1】:

您可以使用^(?:[\\p{L}\\p{M}]|\\d){2,15}$ 匹配任何包含 2 到 15 个字母或数字字符的字符串。

请注意,\p{L} 匹配 Unicode 字母,\p{M} 匹配变音符号。 \d 将匹配一个数字。当我们将它们全部放入一个字符类时,我们匹配一个(预先组合的)字母或一个数字,2 到 15 次。

如果字符串为 15,则表达式需要匹配 ----- !{2,15}

你可以使用"^(?:[\\p{L}\\p{M}]|\\d)$|^(?:[\\p{L}\\p{M}]|\\d){16,}$":

let name = "n"
let valid_block = "(?:[\\p{L}\\p{M}]|\\d)"
if let match = name.rangeOfString("^" + valid_block + "$|^" + valid_block + "{16,}$", options: .RegularExpressionSearch) {
    print(match)
}

SWIFT code demo

【讨论】:

  • 很高兴它对你有用。如果我的回答对您有帮助,也请考虑投票。
最近更新 更多