Confused
Confused

Reputation: 3926

Regular expression to find a number ends with special character in Swift

I have an array of strings like:

"Foo", "Foo1", "Foo$", "$Foo", "1Foo", "1$", "20$", "1$Foo", "12$$",  etc.

My required format is [Any number without dots][Must end with single $ symbol] (I mean, 1$ and 20$ from the above array)

I have tried like the below way, but it's not working.

func isValidItem(_ item: String) -> Bool {
   let pattern = #"^[0-9]$"#
   return (item.range(of: pattern, options: .regularExpression) != nil)
}

Can some one help me on this? Also, please share some great links to learn about the regex patterns if you have any.

Thank you

Upvotes: 1

Views: 1827

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626845

You can use

func isValidItem(_ item: String) -> Bool {
   let pattern = #"^[0-9]+\$\z"#
   return (item.range(of: pattern, options: .regularExpression) != nil)
}

let arr = ["Foo", "Foo1", "Foo$", "$Foo", "1Foo", "1$", "20$", "1$Foo", "12$$"]

print(arr.filter {isValidItem($0)})
// => ["1$", "20$"]

Here,

  • ^ - matches start of a line
  • [0-9]+ - one or more ASCII digits (note that Swift regex engine is ICU and \d matches any Unicode digits in this flavor, so [0-9] is safer if you need to only match digits from the 0-9 range)
  • \$ - a $ char
  • \z - the very end of string.

See the online regex demo ($ is used instead of \z since the demo is run against a single multiline string, hence the use of the m flag at regex101.com).

Upvotes: 1

Related Questions