2015-04-21 3 views
0

Я рассмотрел множество рекомендаций regex, но, к сожалению, они были либо слишком ограничительными (оскорбляя некоторых людей, не допустив правильного ввода их правильного имени), либо слишком либеральных, я имею в виду разрешение ввода мусора типа «---».Расширенное регулярное выражение для FirstName LastName

К сожалению, я не регулярное выражение гуру, я могу понять среды сложных выражений, и, возможно, могу изменить простые изменения, но теперь я застрял

Вот мой стартер (со всеми акцентированными буквами, что я не буду копировать здесь потому что строка будет длиннее, чем мой экран)

[a-zA-Z ,.'-]{3,30} 

пространства и тому, .'- пунктуация будет делать в большинстве случаев, но в случае, если кто есть предложение, что символ, чтобы добавить, пожалуйста, прокомментирует.

Теперь мой вопрос: это регулярное выражение позволяет иметь более 1 пунктуации подряд, чего я бы не хотел разрешать. Законно иметь пробел, затем одну пунктуацию, но не легально иметь два или более, например «---»

Я также запрещаю, начиная с космоса, .-, другими словами, я хотел бы включить только буквы и "как первый символ. Я могу справиться с этим (я надеюсь):

[a-zA-Z']{1}[a-zA-Z ,.'-]{2,29} 

... но вопрос, как предотвратить, чтобы ввести кучу знаков препинания по-прежнему остается

+1

Какой язык вы используете? –

+1

Пожалуйста, окружайте части регулярного выражения «' », чтобы мы могли лучше определить их в вопросе. – Maroun

+0

Существует много вариантов регулярных выражений. Какой вкус вы ожидаете от ответа? PCRE? – 0xC0000022L

ответ

1

В .NET, вы можете использовать именованные классы Unicode, чтобы Unicode письма и многое другое.

Вот регулярное выражение можно использовать:

^(?!.*\p{P}\p{P}+)[\p{L}']{1}[\p{L}\p{Zs},.'-]{2,29}$ 

(?!.*\p{P}\p{P}+) запретит несколько знаков пунктуации на участке.


В качестве альтернативы, вы можете запретить 2 или более последовательных небуквенные символы с

^(?!.*\P{L}\P{L}+)[\p{L}']{1}[\p{L}\p{Zs},.'-]{2,29}$ 

, но это не позволит comma + space.

Вот demo (желательно проверить каждую строку отдельно на regexstorm.net или посмотреть alternative demo).

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