为什么Swift RegEx符合“e1234”?

时间:2016-08-11 04:05:13

标签: regex swift

这是正则表达式:

    let legalStr = "(?:[eE][\\+\\-]?[0-9]{1,3})?$"

这是调用:

        if let match = sender.stringValue.rangeOfString(legalStr, options: .RegularExpressionSearch) {
            print("\(sender.stringValue) is legal")
        }
        else {
            print( "\(sender.stringValue) is not legal")
        }

如果我输入垃圾,就像“abcd”一样返回非法字符串。 如果我键入类似“e123”的内容,则返回合法字符串。 (注意空字符串也是合法的。) 但是,如果我输入“e1234”,它仍然会返回“合法”。我希望它回归“不合法”。我在这里错过了什么吗?顺便说一句,请注意正则表达式末尾的“$”。这三个数字应出现在字符串的末尾。

如果没有立即清除,则字符串的来源是文本编辑框。

1 个答案:

答案 0 :(得分:1)

您的模式仅锚定在末尾,并匹配空字符串。所以任何字符串都会成功匹配,只需在最后将模式匹配为空字符串即可。

在前面添加^以将其固定在那一侧。