我的函数应该处理每个正则表达式并返回true或false。它工作得很好......现在还是
func test(_ input: String) -> Bool {
let pattern = ".{7}" //allow exactly 7 numbers
let regex = try! NSRegularExpression(pattern: pattern, options: [NSRegularExpression.Options.caseInsensitive])
let leftover = regex.stringByReplacingMatches(in: input, options: [], range: NSMakeRange(0, input.characters.count), withTemplate: "")
if leftover.isEmpty {
return true
}
return false
}
print(test("123456")) //false
print(test("1234567")) //true
print(test("12345678")) //false
print(test("")) //true - I expect false
所以我理解为什么test("")
是假的。但是,如何修复我的正则表达式返回false?
有时我使用正则表达式.*
我的函数也应该处理这个。所以我不能像这样检查
if input.isEmpty {
return false
}
答案 0 :(得分:2)
解决方案是指定您的正则表达式必须匹配整个字符串才有效,因此您可以通过在正则表达式中添加^
和$
来确保开始和结束字符串。
let pattern = "^.{7}$" //allow exactly 7 numbers
let regex = try! NSRegularExpression(pattern: pattern, options: [.caseInsensitive])
let numberOfOccurences = regex.numberOfMatches(in: input, options: [], range: NSMakeRange(0, input.utf16.count))
return (numberOfOccurences != 0)
理论上,我们应该检查numberOfOccurences
是否真的等于1才能返回true,但检查开始和结束应该只给你一个或零匹配。
答案 1 :(得分:2)
如果input
为空字符串,则leftover
将为空字符串
同样,因此你的函数返回true
。另一种情况
你的方法失败了
print(test("12345671234567")) // true (expected: false)
另一种方法是使用range(of:)
String
.regularExpression
方法和\d{7}
选项。然后检查匹配的范围是否是整个字符串。
为了匹配7个数字(而不是7个任意字符),
模式应为func test(_ input: String) -> Bool {
let pattern = "\\d{7}"
return input.range(of: pattern, options: [.regularExpression, .caseInsensitive])
== input.startIndex..<input.endIndex
}
。
TEAMCITY_SERVER_MEM_OPTS=-Xmx4g -XX:MaxPermSize=270m -XX:ReservedCodeCacheSize=350m