Оператор ИЛИ в регулярном выражении PHP (включая проверку юникода) - PullRequest
1 голос
/ 08 июня 2009

Благодаря ответу С. Герига в начальном вопросе У меня есть регулярное выражение, которое отлично работает и проверяет переменную на основе свойства Letter (кроме китайского, но это другая тема:):

if (preg_match('/^\p{L}+$/u', $input)) {
    // OK
}

К сожалению, я не могу расширить его, чтобы поддержать номера соответствующих вопросов / восклицательных знаков и сотрудничества. Мои эксперименты включали:

'/^[\p{L}]|[0-9]|[\n]|[']|[\?]|[\!]|[\.]|[\,]+$/u'
'/^[\p{L}+]|[0-9]|[\n]|[']|[\?]|[\!]|[\.]|[\,]$/u'
'/^[\p{L}+]|[0-9]|[\n]|[']|[\?]|[\!]|[\.]|[\,]$/u'

Что такое правильное регулярное выражение? Пожалуйста, направьте меня в правильном направлении.

Большое, большое спасибо!

1 Ответ

1 голос
/ 08 июня 2009

\p{L}+ уже является "непустой строкой \p{L} 's". [] с другой стороны, указывает «один из», поэтому, в зависимости от ваших реальных требований, может сработать любой из следующих вариантов:

Любое (положительное, ненулевое) число указанных символов в последовательности:

/^[\p{L}0-9\n'?!.,]+$/u

Либо последовательность \p{L} с, либо последовательность смешанных [0-9\n'?!.,]:

/^(\p{L}+|[0-9\n'?!.,]+)$/u

Либо последовательность \p{L} с, либо точно одна из [0-9\n'?!.,]:

/^(\p{L}+|[0-9\n'?!.,])$/u
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...