Skip to content

Commit c7fc6d9

Browse files
fix!: strip leading zeros String extension function fixed and behaviour is modified. Added regression test;
1 parent 42aabb1 commit c7fc6d9

File tree

2 files changed

+42
-9
lines changed

2 files changed

+42
-9
lines changed

Sources/Core/Utility/String+Extension.swift

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,22 @@ extension String {
8484
return self
8585
}
8686

87-
func stripLeadingZeroes() -> String? {
88-
let hex = self.addHexPrefix()
89-
guard let matcher = try? NSRegularExpression(pattern: "^(?<prefix>0x)0*(?<end>[0-9a-fA-F]*)$", options: NSRegularExpression.Options.dotMatchesLineSeparators) else {return nil}
90-
let match = matcher.captureGroups(string: hex, options: NSRegularExpression.MatchingOptions.anchored)
91-
guard let prefix = match["prefix"] else {return nil}
92-
guard let end = match["end"] else {return nil}
93-
if (end != "") {
94-
return prefix + end
87+
/// Strips leading zeroes from a HEX string.
88+
/// ONLY HEX string format is supported.
89+
/// - Returns: string with stripped leading zeroes (and 0x prefix) or unchaged string.
90+
func stripLeadingZeroes() -> String {
91+
let hex = addHexPrefix()
92+
guard let matcher = try? NSRegularExpression(pattern: "^(?<prefix>0x)(?<leadingZeroes>0+)(?<end>[0-9a-fA-F]*)$",
93+
options: .dotMatchesLineSeparators)
94+
else {
95+
NSLog("stripLeadingZeroes(): failed to parse regex pattern.")
96+
return self
9597
}
96-
return "0x0"
98+
let match = matcher.captureGroups(string: hex, options: .anchored)
99+
guard match["leadingZeroes"] != nil,
100+
let prefix = match["prefix"],
101+
let end = match["end"] else { return self }
102+
return end != "" ? prefix + end : "0x0"
97103
}
98104

99105
func matchingStrings(regex: String) -> [[String]] {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//
2+
// NSRegularExpressionTest.swift
3+
//
4+
// Created by JeneaVranceanu at 22.09.2022.
5+
//
6+
7+
import Foundation
8+
import XCTest
9+
10+
@testable import Core
11+
12+
class NSRegularExpressionTest: XCTestCase {
13+
14+
func test_stripLeadingZeroes() {
15+
XCTAssertEqual("random-string".stripLeadingZeroes(), "random-string")
16+
XCTAssertEqual("".stripLeadingZeroes(), "")
17+
XCTAssertEqual("0x".stripLeadingZeroes(), "0x")
18+
XCTAssertEqual("0x0".stripLeadingZeroes(), "0x0")
19+
XCTAssertEqual("0x00".stripLeadingZeroes(), "0x0")
20+
XCTAssertEqual("0x00".stripLeadingZeroes(), "0x0")
21+
XCTAssertEqual("0x00000".stripLeadingZeroes(), "0x0")
22+
XCTAssertEqual("0x000001".stripLeadingZeroes(), "0x1")
23+
XCTAssertEqual("0x1000001".stripLeadingZeroes(), "0x1000001")
24+
XCTAssertEqual("0x00000000012300001".stripLeadingZeroes(), "0x12300001")
25+
}
26+
27+
}

0 commit comments

Comments
 (0)