2014-01-09 5 views
0

Я хочу проверить строку в объективе C на основе следующих правил:Цель c регулярное выражение для полного имени

1) Никаких номеров и специальных символов не допускается.

2) Строка не должна начинаться с пробела.

3) Строка не должна заканчиваться пробелом.

4) Любое количество слов допускается в строке.

5) Между двумя последовательными словами допускается только одно пространство.

В настоящее время я использую следующий код:

NSString *nameRegex = @"[A-Za-z]+[[\\s][A-Za-z]+]*"; 
NSPredicate *nameTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", nameRegex]; 
bool isCheckStringValid = [nameTest evaluateWithObject:checkString]; 

Однако это не удовлетворяет 3-й и 5-й fules. Я пробовал это в течение часа, но не повезло. Может ли кто-нибудь предложить мне правильное регулярное выражение? Благодарю.

+0

попробовать^[A-Za-Z] + ([\ s] [A-Za-г ] +) * $ –

+2

Вы делаете огромное предположение, что полное имя человека - это всего два набора «нормальных» символов, разделенных пробелом ... Существует много культур, где полные имена больше двух слов, и многие из них используются специальные символы (при условии, что ваши «специальные символы» включают такие вещи, как üøéî и т. д.) – Jasarien

+0

[Программисты Falsenesss верят в имена] (http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about -names /) – Abizern

ответ

1

Я не знаю, Objective-C синтаксис, но регулярное выражение, как этот должен работать:

^[A-Za-z]+(?:\\s[A-Za-z]+)*$ 
+0

это полезно только на английском языке – yatanadam

+0

@yatanadam: Y ou're right, но я просто повторно использую регулярное выражение OP с исправлением. – Toto

Смежные вопросы