在Swift中为包含字母或数字的字符串创建正则表达式

cu6pst1q  于 2023-10-15  发布在  Swift
关注(0)|答案(3)|浏览(178)

我想创建正则表达式,在这里我可以检查字符串是否包含任何大写或小写字母,以及是否包含它应该返回true的数字。
另外,如果我可以限制字符数的例子:仅限64个字符

示例:

  1. Apple = True
  2. aPPle = True
  3. App1e = True
  4. @apple = true
  5. !^%$# = false (because it does not contains any letters or digits.)

我试过下面的正则表达式,但它不工作:

  1. let localRegex = "[A-Za-z0-9]{1,64}\\."
t8e9dugd

t8e9dugd1#

如果没有长度限制,并且假设您将自己限制为ASCII,您只需要

  1. [A-Za-z0-9]

最好在正则表达式之外执行长度检查,但“AND”操作可以使用lookaheads执行。

  1. ^(?=.*[A-Za-z0-9])(?=.{1,64}\z)

或只是

  1. ^(?=.*[A-Za-z0-9]).{1,64}\z

我不知道Swift,所以请记住:

  • 我不知道Swift的正则表达式语言是否支持lookahead,但我找到的文档表明它支持。
  • 上面假设.匹配任何字符。在大多数语言中,这需要一个标志(sDOTALL等)。我相信Swift也是如此。否则,您可能会遇到包含换行符的输入的问题。
  • 上面假设\z用于匹配字符串的结尾,并且只匹配字符串的结尾。它可能是Swift中的其他东西,但我找到的文档表明\z是要使用的原子。
  • 有些语言要求模式匹配整个字符串。我想斯威夫特不是这样的。

根据需要进行调整。

展开查看全部
djp7away

djp7away2#

这更像是一组密码要求。
所以使用类似密码的正则表达式。

  1. \A(?=[\s\S]{1,64}\z)(?=[\s\S]*[a-zA-Z])(?=[\s\S]*[0-9])

格式化

  1. \A
  2. (?= [\s\S]{1,64} \z ) # 1-64 chars
  3. (?= [\s\S]* [a-zA-Z] ) # at least a ASCII letter
  4. (?= [\s\S]* [0-9] ) # at least a ASCII digit
dz6r00yl

dz6r00yl3#

  1. let input = "Your_Input_String_Here"
  2. let regex = "^(?=.*[a-zA-Z])(?=.*\\d).{1,64}$"
  3. if let range = input.range(of: regex, options: .regularExpression) {
  4. print("True")
  5. } else {
  6. print("False")
  7. }

相关问题