Какой тип регулярных выражений может разрешать использование специальных символов, но не разрешать строки, в которых используются только специальные символы? - PullRequest
1 голос
/ 13 марта 2019

Я пишу регулярное выражение для допустимых имен и фамилий.В настоящее время я хочу разрешить только следующие значения

  • от a до z
  • от A до Z
  • '
  • (-) (символ тире)
  • диакритические знаки

Мое регулярное выражение @"^[a-zA-Z-'\p{L}]*$"

Хотя я хочу разрешить апострофы и тире, я также не хочу, чтобы имя было просто тире или просто апостроф.Поэтому, чтобы сделать это, я написал несколько дополнительных регулярных выражений в Fluent Validator, чтобы поймать эти крайние случаи, но это не позволит мне разделить их.

        .Matches(@"^[a-zA-Z-'\p{L}]*$")
        .Matches(@"[^-]")
        .Matches(@"[^']");

Это тоже не так уж и здорово, так как я тожене хочу разрешать имена, которые являются просто апострофами, такими как '' '' '' или просто черточками, такими как ---------.

Существует ли более эффективное регулярное выражение, которое можно написать для обработкивсе эти случаи?

1 Ответ

1 голос
/ 13 марта 2019

Для этого можно использовать отрицательное предпросмотр :

@"^(?![-']*$)[-'\p{L}]*$"

Также a-zA-Z включены в \p{L}.

Пояснение:

^          # Start of string
(?!        # Assert that it's impossible to match...
 [-']*     # a string of only dashes and apostrophes
 $         # that extends to the end of the entire string.
)          # End of lookahead.
[-'\p{L}]* # Match the allowed characters.
$          # End of string.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...