2013-05-27 4 views
0

я должен соответствоватьRegex: Матч дополнительных символов, но если присутствует матч, который первый

Salutation(optional) FirstName LastName 

Моих регулярным выражения:

^(([mMrRsSdDlLtTcCoO]{2,4})\.?\s+)?([a-zA-Z,.'-]{2,}\s+)([a-zA-Z,.'-]{2,})$ 

Проблемы с моим регулярным выражением это прекрасно работает с

Г-жа Памела Андерсон или Памела Андерсон

также на Miss Pamela (неправильный случай).

+0

Почему вы не используете '|' разделитель? – hjpotter92

+0

@ hjpotter92 где? –

+2

Вам не хватает, по крайней мере, двух '(' в начале ... – migg

ответ

3

Ваше регулярное выражение соответствия Miss в FirstName и Pamela, как Фамилия

ваше регулярное выражение должно быть

^(?!(Mr|Miss|..)[.]?\s+[a-zA-Z,.'-]+$)[a-zA-Z,.'-]+[.]?(\s+[a-zA-Z,.'-]){1,2}$ 
------------------------------------- 
     | 
     |->don't match further if it has Salutation and firstname or lastname 

Как примечание стороны, дон 't use [mMrRsSdDlLtTcCoO]{2,4} может быть много перестановок допустимых имен, таких как коко (мои друзья зовут), Род

Укажите это явно с помощью | как (Mr|Mrs|Miss|Dr)

0

Попробуйте это:

(?:^[mMrRsSdDlLtTcCoO]{2,4}\.?\s+?)?([\w,.'-]{2,})\s+([\w,.'-]{2,}) 
Смежные вопросы