Swift中包含特殊字符的正则表达式

8
我将尝试使用以下字符串:
var passwordRegex = "^[A-Za-z0-9 !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~].{8,}$"

作为我的常规表达式模式,但它一直失败,说该模式无效。我使用了\字符来转义字符:"\,但它会抛出错误:invalid escape sequence in literal,对于正则表达式关键字符,如^ & [ ] | .等。
我需要做什么才能允许这些字符?
 ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~   

在我的正则表达式中如何包含空格?我猜这与我的转义方式有关,但是我在关于SWIFT正则表达式的任何地方都找不到与这些字符相关的内容。

6
一种有用的方法是NSRegularExpression.escapedPattern(for:) - Martin R
如果你想正确加密密码,那么限制密码中允许的字符是非常标准的。除非你计划编写一个处理世界上每一个可能的字符(包括中文符号、阿拉伯符号等)的加密程序。 - user2876886
由于您将对从字符串获取的数据进行加密,那么为什么特定字符与加密密码的能力有任何关系呢? - rmaddy
你知道吗,我并不完全确定。但是我知道限制用户可以用于密码的字符是非常普遍的。我不知道你们为什么关心这个,现在你们已经离题了。 - user2876886
1个回答

30

问题在于字符[\]在正则表达式中具有特殊含义,因此它们需要进行转义。

因此,在正则表达式中需要使用\[\\\]。但由于这是在Swift字符串中,所以每个\都需要使用\进行转义。

因此,[\]在正则表达式中变为\[\\\],在Swift字符串中变为\\[\\\\\\]

最终有效的字符串是:

var passwordRegex = "^[A-Za-z0-9 !\"#$%&'()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~].{8,}$"

啊,逃脱了转义字符。有道理。哈哈,成功了!谢谢! - user2876886
逃逸异常。再次感谢 @rmaddy 挽救了局面 :-) - Nicolas Miari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接