Регулярное выражение для проверки двух символов - PullRequest
2 голосов
/ 12 октября 2011

Я хочу проверить, значение 'H' или 'T' или это может быть 'H' Orelse это может быть 'T' или оба 'H' и 'T'

это все хранится в массиве

Я использую это регулярное выражение для проверки этих двух слов.

$combo  = preg_match('[HT]',strtoupper($_REQUEST['combo']));

это дает мне успех, если значение HT. Если я поставлю только «H» или «T» ... или повторяющиеся «H» или «T», это не будет соответствовать приведенному выше коду.

надеюсь, что это поможет вам понять ... простая игра с подбрасыванием монет, в которой есть два возможных выхода: "H" -головки и "T-хвосты" ..... Пользователь может сыграть всего 9 раундов ... $ combo хранит эту комбинацию, которая содержит только H и T ... Я проверяю вызов php с полученного URL, например: - www.domain-name.com/submit_combo_predisc.php/?prefix=p&uid=username&txn=9574621083&combo = HH H & к = 29c3550e430723e5c61a66bd03ba4ff5 ....

здесь у пользователя есть три правильных ввода, и он выигрывает определенную сумму для правильного получения трех комбинаций. В URL, если я введу «HH4» вместо «HHH», он все равно отображает, что вы получили три правильных комбо, и пользователю дается определенное количество. для получения правильных трех комбинаций .... что на самом деле неправильно .... потому что переданные значения являются "HH4" ... n не "HHH". Пользователь может фактически использовать URL, чтобы выиграть неограниченное количество ....

Ответы [ 4 ]

4 голосов
/ 12 октября 2011
$combo  = preg_match('/^(H|T|HT)$/',strtoupper($_REQUEST['combo']));

это соответствует H, T и HT.

, если вы тоже хотите соответствовать TH,

$combo  = preg_match('/^[HT]{1,2}$/',strtoupper($_REQUEST['combo']));

- лучший выбор.

3 голосов
/ 12 октября 2011
$combo  = preg_match('/[HhTt]/',$_REQUEST['combo']); 
3 голосов
/ 12 октября 2011

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

'^[HT]{1,2}$'

Это допускает следующие значения: 'H', 'T', 'HT', 'TH', 'HH' и 'TT', но ничего больше!

3 голосов
/ 12 октября 2011

Вы хотите использовать квантификатор для этого.{1,2} будет работать:

 preg_match('/^[HT]{1,2}$/'

Обратите внимание, что в вашем регулярном выражении также отсутствуют разделители.Вот почему он всегда соответствовал HT - потому что квадратные скобки были интерпретированы как разделители, а не как группа символов.


Похоже, что вы на самом деле хотите (но никогда не говорите) подсчитать количество H с и T с.Тогда более простой подход будет:

 $combo = strlen(preg_replace('/[^HT]/i', "", $_REQUEST['combo']));
...