我似乎不能正确验证用户FirstName + LastName并检查MiddleName,如下所示:
John Doe - Valid
John M Doe - Valid
John Mr Doe - Invalid
John m Doe - Invalid
因此,MiddleName只能是一个大写字母。
我想出了什么:
无法弄清楚如何检查MiddleName是否只有1个字符。
我目前的正则表达式是这样的:
var isValid = /^((\b[a-zA-Z]{3,40}\b)\s*){2,}$/.test($(this).val());
// ^((\b[a-zA-Z]{3,40}\b)\s*){2,}$ - actual regex
答案 0 :(得分:3)
您可以使用
/^[a-zA-Z]{3,40}(?:\s[A-Z])?\s[a-zA-Z]{3,40}$/
请参阅regex demo。 注意:{3,40}
是一个limiting quantifier,可以匹配3到40次连续出现的量化子模式(即[a-zA-Z]
字母模式。如果您不打算要限制名字和姓氏的上限(最大字母数限制),只需删除40
。
<强>详情
^
- 字符串开头[a-zA-Z]{3,40}
- 3到40个ASCII字母(?:\s[A-Z])?
- (此处)可选序列
\s
- 空白[A-Z]
- 一个大写 ASCII字母\s
- 空白[a-zA-Z]{3,40}
- 3到40个ASCII字母$
- 字符串结束。JS演示:
var strs = [' John Doe', 'John M Doe', 'John Mr Doe', 'John m Doe'];
var rx = /^[a-zA-Z]{3,40}(?:\s[A-Z])?\s[a-zA-Z]{3,40}$/;
for (var s of strs) {
console.log(s, "=>", rx.test(s));
}
&#13;
答案 1 :(得分:2)
试试这个正则表达式:
NSString *localIdentifier;
PHFetchResult<PHAssetCollection *> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
for (PHAssetCollection *assetCollection in assetCollections) {
if([[assetCollection localizedTitle] isEqualToString:album] ){
localIdentifier = assetCollection.localIdentifier;
break;
}
}
if(localIdentifier ){
///fetch album
PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[localIdentifier] options:nil];
}else{
///creat album here
}
Check here进行演示。
解释它的工作原理:
/^[A-Za-z]{3,}\s+([A-Z]\s+)?[A-Za-z]{3,}$/
字符串的开头。^
检查3个或更多字母。[A-Za-z]{3,}
检查一个或多个空格字符。\s+
可选择检查一个大写字母字符,后跟一个或多个whitepscae字符。所以它要么匹配一个字母+空格,要么就是空格。([A-Z]\s+)?
再次检查3个或更多字母。[A-Za-z]{3,}
字符串结束。