0

このことは本当に私を混乱させます、私の無知を許してください。

ここにvar$nameがあり、数字を含まないようにしたいので、数字を含めたくありません。私preg_match()はこれです:

var_dump(preg_match('/[^\d]/',$name));

テストケース:

$name = "213131"; // int(0) 
$name = "asdda"; // int(1)
$name = "as232dda"; // int(1)

私が欲しいのは、3番目のケースもそうすることint(0)です。

私はこれを理解するのに本当に苦労していますpreg_match()、ドキュメントはパターンが主題に一致する場合は1を返すと言います。ここで私の場合、否定されたクラスを使用します。

4

3 に答える 3

4

文字と数字の両方があるため、#3が一致します。英語の正規表現は基本的に

数字以外の文字がある場合は一致します

数字以外の文字のみを照合する場合は、文字列全体に対して正規表現を照合し、任意の数の文字を許可する必要があります。

^[^\d]+$
于 2012-11-14T12:13:33.417 に答える
1

正規表現は、数字以外の数字が少なくとも1つあることを確認するだけです。代わりに、それが数字以外のものだけであることを確認する必要があります。

var_dump(preg_match('/^\D+$/',$name));

^および$は文字列の最初と最後です。\D数字ではないものを意味します。反対です\d。したがって、これは最初から最後まで数字以外の文字列にのみ一致します。空の文字列には一致しません。一致させる場合は、に置き換え+てください。*空の文字列も)。

于 2012-11-14T12:14:46.707 に答える
0

これを試して:

<?php
    $string = "as232dda";
    $new_string = trim(str_replace(range(0,9),'',$string));
    echo $new_string;// gives 'asdda'
?>

または関数形式:

<?php
  function remove_numbers($string){
    return(trim(str_replace(range(0,9),'',$string)));
  }

  $string = "as232dda";
  echo remove_numbers($string); // gives 'asdda'
?>
于 2012-11-14T12:14:56.890 に答える