PHP REGEX: игнорировать + и # - PullRequest
1 голос
/ 04 июля 2010

Итак, вот что я делаю именно:

У меня есть форма с подписью справа от нее, я хочу написать в форме только AZ, 0-9 и пробелыи для подписи я хочу сделать наоборот, поэтому, если пользователь пишет что-то не так, я могу показать, в чем проблема for example: "Invalid Charachter"

Но я застрял с + и #Я также хочу игнорировать их в форме с регулярным выражением, чтобы я мог показать сообщение "Invalid character" и для них, так как я увидел, что php думает, что знак + означает = к пробелу () или что, но я должен игнорировать + и #знаки тоже.Это мой текущий код:

preg_match_all("/[^\w\s]/",$string,$matches);


foreach($matches[0] as $ic){
     if(strpos($str,$ic) || $str[0] == $ic){
          $fullname_error = "Invalid Character";
     }  
}

Допустимые строки:

  • Джон Доу
  • Мэри Сью

Недопустимые строки:

  • J # ohn Doe
  • John & Doe
  • John + Doe
  • Mar @ y+ Сью
  • ! Мэри Сью
  • Мэри Сью!

Ответы [ 2 ]

1 голос
/ 04 июля 2010

Вы можете сделать что-то подобное для обработки недопустимых символов:

$str = 'gum@#+boo';
if (preg_match_all('/[^\w\s]/u', $str, $matches)) {
    echo sprintf(
        '<p>Your input <b>%s</b> contains %d invalid character%s: <b>%s</b>.</p>',
        htmlspecialchars($str),
        count($matches[0]),
        count($matches[0]) > 1 ? '' : 's',
        implode('</b>, <b>', array_map('htmlspecialchars', array_unique($matches[0])))
    );
    echo '<p>Please choose a different input value.</p>';
}
1 голос
/ 04 июля 2010

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

<?
function checkString($str)
 {
 echo "Testing ".$str."<br />";
 // Check if there are invalid characters
 if (!preg_match("/^[a-zA-Z0-9\s]+$/", $str))
  {
  echo "Oh no! There are invalid characters! :(<br />";
  }
 else
  {
  echo "There is no invalid character!!! :)<br />";
  }

 // What are the invalid characters?
 if (preg_match("/[^(a-zA-Z0-9\s)]/", $str, $matches))
  {
  echo "Invalid character: ".$matches[0]."<br />";
  }
 }

checkString("This is a good string");
checkString("This is a not a good string$%#@#$"); 
?>
...