-
" 字符本身,请使用 "$"
- 修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "+"
- ^ 匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "^"
-
\w
匹配字母、数字、下划线,其中字母包括各种语言(测过中文、英文、罗马字母) -
[\u4e00-\u9fa5]
中文的正则表达式,实际 Swfit 代码中应该为下面两种中的一种-
[\\u4e00-\\u9fa5]
:Swfit String 中\
为转义符号,如果是\u
,u
不是特殊符号,无法转义,因此前面有两个\
,表示实际的字符串是\u
,而\u
为正则表达式中 [\u{4e00}-\u{9fa5}]
-
实例
- 基本使用
func regulayExpression(regularExpress: String, validateString: String) -> [String] {
do {
let regex = try NSRegularExpression.init(pattern: regularExpress, options: [])
let matches = regex.matches(in: validateString, options: [], range: NSRange(location: 0, length: validateString.count))
var res: [String] = []
for item in matches {
let str = (validateString as NSString).substring(with: item.range)
res.append(str)
}
return res
} catch {
return []
}
}
func replace(validateStr: String, regularExpress: String, contentStr: String) -> String {
do {
let regrex = try NSRegularExpression.init(pattern: regularExpress, options: [])
let modified = regrex.stringByReplacingMatches(in: validateStr, options: [], range: NSRange(location: 0, length: validateStr.count), withTemplate: contentStr)
return modified
} catch {
return validateStr
}
}
- qq 号,仅支持数字输入,长度为5~12位数字
let digitRegular = "^\\d{5,12}$"
let validateStr = "9064690a"
let diRes = regulayExpression(regularExpress: digitRegular, validateString: validateStr)
- 微信:可使用6-20个字母、数字下划线和减号,必须以字母开头、不支持设置中文
let wechatRegular = "^[a-zA-Z][a-zA-Z\\d_-]{5,19}$"
let wechatValidateStr = "a2345-"
let wechatRes = regulayExpression(regularExpress: wechatRegular, validateString: wechatValidateStr)
- 昵称:最多12个字符,仅支持数字、英文、汉字。(汉字占两个字符)
思路:由于 Swift 中 String 的长度为 characterset 的个数,因此需要先计算出字符串实际的长度,因此将字符串中的中文替换为 2 个字母
// 中文
let regular = "[\\u4e00-\\u9fa5]"
// 将中文以 "aa"代替
let tempNickName = replacRegularExpression(regularExpress: regular, validateStr: nickName, contentString: "aa")
guard tempNickName.count <= 12 else {
return false
}
let nickNameRegular = "^[\\da-zA-Z\\u4e00-\\u9fa5]+$"
return regularExpression(regularExpress: nickNameRegular, validateString: nickName).count > 0
CharacterSet
简单的规则可以通过 CharacterSet 来判断
iOS CharacterSet(字符集)简单理解
// 判断一个字符串中是否只有数字
let a = "12222314a".rangeOfCharacter(from: CharacterSet.decimalDigits.inverted)
if a != nil {
printf("不全是数字")
}
网友评论