一个大写字母验证正则表达式
One uppercase letter validation regex
我正在对长度为 4 但仅包含一个大写字母的字母数字字符进行正则表达式验证。
这是我的代码:
NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"(?=.*[0-9])(?=.*[A-Z])[a-zA-Z0-9]{4}" options:NSRegularExpressionCaseInsensitive error:&error];
但是,它没有正确执行检查。我该怎么做?
像这样改变你的模式,
@"^(?=.*[0-9])(?=[^A-Z]*[A-Z][^A-Z]*$)[a-zA-Z0-9]{4}$"
我想这对你来说已经足够了
@"^(?=.*\d)(?=.*[A-Z]).{4}$"
或者,如果您想给出最小和最大长度,请使用以下代码段
@"^(?=.*\d)(?=.*[A-Z]).{4,15}$"
此处 4 是字符串的最小长度,15 是字符串的最大长度
如果需要区分大小写,需要去掉NSRegularExpressionCaseInsensitive
选项。它消除了小写和大写之间的区别。
删除后,following regex(如果需要支持 Unicode 字母):
@"\A(?=\D*\d)(?=\P{Lu}*\p{Lu}\P{Lu}*\z)[\p{L}\d]{4}\z"
或者只是 ASCII:
@"\A(?=\D*\d)(?=[^A-Z]*[A-Z][^A-Z]*\z)[A-Za-z\d]{4}\z"
NSRegularExpression *expression = [
NSRegularExpression regularExpressionWithPattern:@"\A(?=\D*\d)(?=[^A-Z]*[A-Z][^A-Z]*\z)[A-Za-z\d]{4}\z"
options:0
error:&error];
正则表达式细分:
\A
- 字符串的明确开头
(?=\D*\d)
- 检查 0 个或多个非数字后是否至少有 1 个数字 (\D*
)
(?=\P{Lu}*\p{Lu}\P{Lu}*\z)
- 检查除大写字母 (\P{Lu}
) 之外的 0 个或多个字符之间是否只有 1 个大写字母 (\p{L}
)
[\p{L}\d]{4}
- 正好是 4 个字母(小写或大写)或数字的字符。
\z
- 匹配字符串的明确结尾。
IDEONE demo 导致 "yes":
NSString * s = @"e3Df";
NSString * rx = @"\A(?=\D*\d)(?=[^A-Z]*[A-Z][^A-Z]*\z)[A-Za-z\d]{4}\z";
NSPredicate * predicat = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", rx];
if ([predicat evaluateWithObject:s]) {
NSLog (@"yes");
}
else {
NSLog (@"no");
}
我正在对长度为 4 但仅包含一个大写字母的字母数字字符进行正则表达式验证。
这是我的代码:
NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"(?=.*[0-9])(?=.*[A-Z])[a-zA-Z0-9]{4}" options:NSRegularExpressionCaseInsensitive error:&error];
但是,它没有正确执行检查。我该怎么做?
像这样改变你的模式,
@"^(?=.*[0-9])(?=[^A-Z]*[A-Z][^A-Z]*$)[a-zA-Z0-9]{4}$"
我想这对你来说已经足够了
@"^(?=.*\d)(?=.*[A-Z]).{4}$"
或者,如果您想给出最小和最大长度,请使用以下代码段
@"^(?=.*\d)(?=.*[A-Z]).{4,15}$"
此处 4 是字符串的最小长度,15 是字符串的最大长度
如果需要区分大小写,需要去掉NSRegularExpressionCaseInsensitive
选项。它消除了小写和大写之间的区别。
删除后,following regex(如果需要支持 Unicode 字母):
@"\A(?=\D*\d)(?=\P{Lu}*\p{Lu}\P{Lu}*\z)[\p{L}\d]{4}\z"
或者只是 ASCII:
@"\A(?=\D*\d)(?=[^A-Z]*[A-Z][^A-Z]*\z)[A-Za-z\d]{4}\z"
NSRegularExpression *expression = [
NSRegularExpression regularExpressionWithPattern:@"\A(?=\D*\d)(?=[^A-Z]*[A-Z][^A-Z]*\z)[A-Za-z\d]{4}\z"
options:0
error:&error];
正则表达式细分:
\A
- 字符串的明确开头(?=\D*\d)
- 检查 0 个或多个非数字后是否至少有 1 个数字 (\D*
)(?=\P{Lu}*\p{Lu}\P{Lu}*\z)
- 检查除大写字母 (\P{Lu}
) 之外的 0 个或多个字符之间是否只有 1 个大写字母 ([\p{L}\d]{4}
- 正好是 4 个字母(小写或大写)或数字的字符。\z
- 匹配字符串的明确结尾。
\p{L}
)
IDEONE demo 导致 "yes":
NSString * s = @"e3Df";
NSString * rx = @"\A(?=\D*\d)(?=[^A-Z]*[A-Z][^A-Z]*\z)[A-Za-z\d]{4}\z";
NSPredicate * predicat = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", rx];
if ([predicat evaluateWithObject:s]) {
NSLog (@"yes");
}
else {
NSLog (@"no");
}