swift 中的正则表达式之外的退格键不起作用
backspace not work in outside of regex in swift
我使用此方法在 .editingChange 事件中对 UITextField 中的 phone 数字进行模式化
但是删除键只删除数字
extension String{
func applyPatternOnNumbers(pattern: String) -> String {
let replacmentCharacter: Character = "#"
let pureNumber = self.replacingOccurrences( of: "[^۰-۹0-9]", with: "", options: .regularExpression)
var result = ""
var pureNumberIndex = pureNumber.startIndex
for patternCharacter in pattern {
if patternCharacter == replacmentCharacter {
guard pureNumberIndex < pureNumber.endIndex else { return result }
result.append(pureNumber[pureNumberIndex])
pureNumber.formIndex(after: &pureNumberIndex)
} else {
result.append(patternCharacter)
}
}
return result
}
}
在 editingChange 事件中使用
let pattern = "+# (###) ###-####"
let mobile = textField.text.substring(to: pattern.count-1)
textfield.text = mobile.applyPatternOnNumbers(pattern: pattern)
// print(textfield.text) +1 (800) 666-8888
问题是 space
& -
, (
, )
个字符无法删除
您尝试的正则表达式不只考虑数字:
[^۰-۹0-9]
我不确定,但您可以将其更改为:
[^۰-۹0-9\s-\(\)]
它可能会起作用。您可以在 []
内的特殊字符之前添加 \ ,您可以将不需要替换的任何其他字符添加到其中。
或者您可以将其简化为
[^\d\s-\(\)]
它可能会起作用。
方法二
您可以使用此 RegEx,它与您拥有的 phone 数字格式完全匹配:
\+\d+\s\(\d{3}\)\s\d{3}-\d{4}
如果不需要,您可以删除第一个 +
\d+\s\(\d{3}\)\s\d{3}-\d{4}
我使用此方法在 .editingChange 事件中对 UITextField 中的 phone 数字进行模式化 但是删除键只删除数字
extension String{
func applyPatternOnNumbers(pattern: String) -> String {
let replacmentCharacter: Character = "#"
let pureNumber = self.replacingOccurrences( of: "[^۰-۹0-9]", with: "", options: .regularExpression)
var result = ""
var pureNumberIndex = pureNumber.startIndex
for patternCharacter in pattern {
if patternCharacter == replacmentCharacter {
guard pureNumberIndex < pureNumber.endIndex else { return result }
result.append(pureNumber[pureNumberIndex])
pureNumber.formIndex(after: &pureNumberIndex)
} else {
result.append(patternCharacter)
}
}
return result
}
}
在 editingChange 事件中使用
let pattern = "+# (###) ###-####"
let mobile = textField.text.substring(to: pattern.count-1)
textfield.text = mobile.applyPatternOnNumbers(pattern: pattern)
// print(textfield.text) +1 (800) 666-8888
问题是 space
& -
, (
, )
个字符无法删除
您尝试的正则表达式不只考虑数字:
[^۰-۹0-9]
我不确定,但您可以将其更改为:
[^۰-۹0-9\s-\(\)]
它可能会起作用。您可以在 []
内的特殊字符之前添加 \ ,您可以将不需要替换的任何其他字符添加到其中。
或者您可以将其简化为
[^\d\s-\(\)]
它可能会起作用。
方法二
您可以使用此 RegEx,它与您拥有的 phone 数字格式完全匹配:
\+\d+\s\(\d{3}\)\s\d{3}-\d{4}
如果不需要,您可以删除第一个 +
\d+\s\(\d{3}\)\s\d{3}-\d{4}