use*_*711 4 regex uppercase swift
我尝试过以下几种方法:
^(?=.*?[A-Z])
^(?=.*?[A-Z])$
^(.*?[A-Z])$
Run Code Online (Sandbox Code Playgroud)
没有任何作用
static func atLeastOneUpperCase(_ input: String) -> Bool {
return NSPredicate(format: "SELF MATCHES %@", upperCaseRegex).evaluate(with: input)
}
Run Code Online (Sandbox Code Playgroud)
输入应该是以上之一。
在 Swift 中,当您使用NSPredicatewith时MATCHES,您需要完整的字符串匹配。
所以,在你的情况下,你需要使用
let upperCaseRegex = "(?s)[^A-Z]*[A-Z].*"
Run Code Online (Sandbox Code Playgroud)
这将匹配以除大写 ASCII 字母之外的 0 个以上字符开头的整个字符串,然后匹配 1 个 ASCII 字母,然后匹配任何 0 个以上字符(因为允许(?s)点匹配包括换行符在内的任何字符)。
另一种方法是使用range(of:options:range:locale:),传递.regularExpression选项:
return input.range(of: "[A-Z]", options: .regularExpression) != nil
Run Code Online (Sandbox Code Playgroud)
这将允许以非锚定的方式匹配正则表达式,即这样,正则表达式引擎将寻找部分匹配,并且不再需要完整的字符串匹配。
统一码注意事项
如果您需要检查任何Unicode 大写字母,请使用\p{Lu}而不是[A-Z]:
return input.range(of: "\\p{Lu}", options: .regularExpression) != nil
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要使用NSPredicate版本:
let upperCaseRegex = "(?s)\\P{Lu}*\\p{Lu}.*"
Run Code Online (Sandbox Code Playgroud)
请注意,此处\P{Lu}*匹配除大写字母外的 0+ 个字符。
| 归档时间: |
|
| 查看次数: |
3781 次 |
| 最近记录: |