如何在 iOS Swift4.2 中验证名称(John D'Largy)?
How to validate a name(John D'Largy) in iOS Swift4.2?
我尝试了堆栈溢出中的所有可能性(link1, )答案对我没有用。
我正在使用以下正则表达式来验证名字。在在线案例 (OnlineRegex) 中,它工作正常,但当我在移动设备中实施时,它无法正常工作。
请帮帮我
func isValidName() -> Bool {
let RegEx = "^[a-zA-Z]+(([\'\,\.\-\ ][a-zA-Z ])?[a-zA-Z]*)*$"
let Test = NSPredicate(format:"SELF MATCHES %@", RegEx)
return Test.evaluate(with: self)
}
我将上面的函数调用为
let str = "John D'Largy"
if str.isValidName(){
print("Valid")
}else{ print("Not valid")}
输出 : "Valid"
我正在调用相同的函数来验证我收到的第一个文本字段 "Not valid"
if firstNameTxt.text.isValidName(){
print("Valid")
}else{ print("Not valid")}
我在移动关键字中输入了相同的文字
OutPut: "Not valid"
我是不是漏了什么?还是我必须更改正则表达式值?。
任何建议。
提前致谢。
See, I tried your code in the playground and changed the syntax a bit but not the logic
Below is the code snippet, try running that in your playground
func isValidName(str: String) -> Bool {
let RegEx = "^[a-zA-Z]+(([\'\,\.\-\ ][a-zA-Z ])?[a-zA-Z]*)*$"
let Test = NSPredicate(format:"SELF MATCHES %@", RegEx)
return Test.evaluate(with: str)
}
func check(){
let str = "John D'Largy"
if isValidName(str: str){
print("Valid")
}else{
print("Not valid")
}
}
check()
希望对您有所帮助!
您可以使用
(?:[a-zA-Z]+(?:['‘’,.\s-]?[a-zA-Z]+)*)?
您的代码已经需要完整的字符串匹配,您不需要像 ^
/ \A
和 $
/ \z
.[=25= 这样的显式锚点]
此外,由于单引号会自动转换为弯引号,您应该将它们添加到正则表达式或 .
关于 thi regex 最重要的事情之一是它应该能够匹配 部分 正确的字符串,因此所有部分都是可选的(即它们可以匹配 0 个字符).它包含一个可选的非捕获组 ((?:...)?
),匹配 1 次或 0 次出现。
正则表达式详细信息
[a-zA-Z]+
- 1 个或多个字母
(?:
- 内部非捕获组的开始:
['‘’,.\s-]?
- 1 或 0 个空格、单引号、连字符
[a-zA-Z]+
- 1+ 个字母
)*
- 0 次或多次重复。
注意:要匹配任何 Unbicode 字母,请使用 \p{L}
而不是 [a-zA-Z]
。
图表:
我尝试了堆栈溢出中的所有可能性(link1,
我正在使用以下正则表达式来验证名字。在在线案例 (OnlineRegex) 中,它工作正常,但当我在移动设备中实施时,它无法正常工作。
请帮帮我
func isValidName() -> Bool {
let RegEx = "^[a-zA-Z]+(([\'\,\.\-\ ][a-zA-Z ])?[a-zA-Z]*)*$"
let Test = NSPredicate(format:"SELF MATCHES %@", RegEx)
return Test.evaluate(with: self)
}
我将上面的函数调用为
let str = "John D'Largy"
if str.isValidName(){
print("Valid")
}else{ print("Not valid")}
输出 : "Valid"
我正在调用相同的函数来验证我收到的第一个文本字段 "Not valid"
if firstNameTxt.text.isValidName(){
print("Valid")
}else{ print("Not valid")}
我在移动关键字中输入了相同的文字
OutPut: "Not valid"
我是不是漏了什么?还是我必须更改正则表达式值?。 任何建议。
提前致谢。
See, I tried your code in the playground and changed the syntax a bit but not the logic
Below is the code snippet, try running that in your playground
func isValidName(str: String) -> Bool {
let RegEx = "^[a-zA-Z]+(([\'\,\.\-\ ][a-zA-Z ])?[a-zA-Z]*)*$"
let Test = NSPredicate(format:"SELF MATCHES %@", RegEx)
return Test.evaluate(with: str)
}
func check(){
let str = "John D'Largy"
if isValidName(str: str){
print("Valid")
}else{
print("Not valid")
}
}
check()
希望对您有所帮助!
您可以使用
(?:[a-zA-Z]+(?:['‘’,.\s-]?[a-zA-Z]+)*)?
您的代码已经需要完整的字符串匹配,您不需要像 ^
/ \A
和 $
/ \z
.[=25= 这样的显式锚点]
此外,由于单引号会自动转换为弯引号,您应该将它们添加到正则表达式或
关于 thi regex 最重要的事情之一是它应该能够匹配 部分 正确的字符串,因此所有部分都是可选的(即它们可以匹配 0 个字符).它包含一个可选的非捕获组 ((?:...)?
),匹配 1 次或 0 次出现。
正则表达式详细信息
[a-zA-Z]+
- 1 个或多个字母(?:
- 内部非捕获组的开始:['‘’,.\s-]?
- 1 或 0 个空格、单引号、连字符[a-zA-Z]+
- 1+ 个字母
)*
- 0 次或多次重复。
注意:要匹配任何 Unbicode 字母,请使用 \p{L}
而不是 [a-zA-Z]
。
图表: