php preg_match regex - сопоставляет символы от a до z и должно содержать @ char - PullRequest
0 голосов
/ 27 августа 2011

добрый вечер,
мне нужно проверить, совпадают ли входные данные с моим регулярным выражением или нет
я использую этот шаблон '@^[a-zA-Z\@]{3,30}$@is'

<?php
if( preg_match('@^[a-zA-Z\@]{3,30}$@is', 'input@input') ){ echo 'matched'; }else{ echo 'no match'; }
?>

если я удалил символ @, регулярное выражение все равно вернулось TRUE

<?php
if( preg_match('@^[a-zA-Z\@]{3,30}$@is', 'inputinput') ){ echo 'matched'; }else{ echo 'no match'; }
?>

Мне нужно отредактировать регулярное выражение, чтобы оно содержало @ char

Ответы [ 4 ]

2 голосов
/ 27 августа 2011

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

/^(?=[^@]*@)[a-zA-Z@]{3,30}$/is

Здесь предварительное утверждение (?=[^@]*@) обеспечивает наличие хотя бы одного @.

2 голосов
/ 27 августа 2011

Это очень просто - просто используйте strpos(), чтобы найти @ символ в строке. Например

if(strpos('@','thestring')!==FALSE)
{
  /* it contains @ */
}
else
{
  /* it doesn't */
}
1 голос
/ 27 августа 2011

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

~^[a-z]?@[a-z@]+$~i

Если вам нужно только 1 @ символ между блоками az, вы можете использовать

~^[a-z]+@[a-z]+$~i

, если вы хотите проверить всю длину строки, которую вы можете использоватьstrlen, если вы хотите сделать это для каждой части отдельно, просто замените + на {mincnt,maxcnt}

1 голос
/ 27 августа 2011

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

%^[a-z]{2,29}@[a-z@]{2,29}$%is

Несколько проблем, которые я также исправил:

  • Вам не нужно использовать [a-zA-Z], если вы указали контроллер i для кейсанечувствительность.
  • Вы можете изменить разделители на любой (почти) символ, который вам нравится, если вы знаете, что символ будет в шаблоне регулярного выражения, не используйте его в качестве разделителя.
...