在Swift应用程序上工作,我有一个用户填写的表单,我希望用户选择自己的用户名.我想要用户名的唯一限制是:
- 没有特殊字符(例如@,#,$,%,&,*,(,),^,<,>,!,±)
- 只允许使用字母,下划线和数字
- 长度最多18个字符,最少7个字符
在哪里可以找到验证输入字符串(函数参数)并根据上述条件返回true或false的函数?我不太熟悉正则表达式.
Wik*_*żew 18
你可以用
^\w{7,18}$
Run Code Online (Sandbox Code Playgroud)
要么
\A\w{7,18}\z
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
图案细节:
^- 字符串的开头(可以替换\A以确保字符串的开始仅匹配)\w{7,18}- 7到18个字符(即任何Unicode字母,数字或下划线,如果您只允许使用ASCII字母和数字,请使用[a-zA-Z0-9]或[a-zA-Z0-9_]替代)$- 字符串结束(用于验证,我宁愿使用\z以确保字符串结尾只匹配).SWIFT代码
请注意,如果您使用NSPredicate和MATCHES,则不需要字符串锚点的开始/结束,因为匹配将默认锚定:
func isValidInput(Input:String) -> Bool {
let RegEx = "\\w{7,18}"
let Test = NSPredicate(format:"SELF MATCHES %@", RegEx)
return Test.evaluateWithObject(Input)
}
Run Code Online (Sandbox Code Playgroud)
否则,你不应该省略锚点:
func isValidInput(Input:String) -> Bool {
return Input.range(of: "\\A\\w{7,18}\\z", options: .regularExpression) != nil
}
Run Code Online (Sandbox Code Playgroud)
func validateUsername(str: String) -> Bool
{
do
{
let regex = try NSRegularExpression(pattern: "^[0-9a-zA-Z\\_]{7,18}$", options: .CaseInsensitive)
if regex.matchesInString(str, options: [], range: NSMakeRange(0, str.characters.count)).count > 0 {return true}
}
catch {}
return false
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13291 次 |
| 最近记录: |