web-dev-qa-db-ja.com

PHP-文字と数字のみを許可する正規表現

私が試してみました:

preg_match("/^[a-zA-Z0-9]", $value)

しかし、私は何か間違ったことをしていると思います。

44
Jason94

1. PHPの組み込みの ctype_alnum を使用します

このために正規表現を使用する必要はありません、PHPには組み込み関数ctype_alnumこれはあなたのためにこれを行い、より速く実行します:

<?php
$strings = array('AbCd1zyZ9', 'foo!#$bar');
foreach ($strings as $testcase) {
    if (ctype_alnum($testcase)) {
        echo "The string $testcase consists of all letters or digits.\n";
    } else {
        echo "The string $testcase does not consist of all letters or digits.\n";
    }
}
?>

2.または、正規表現を使用します

必然的に正規表現を使用したい場合、いくつかのオプションがあります。

まず:

preg_match('/^[\w]+$/', $string);

\wには英数字以外の文字(アンダースコアを含む)が含まれますが、\d

代わりに:

/^[a-zA-Z\d]+$/

または単に:

/^[^\W_]+$/
95
SW4

/(パターン区切り文字)および$(終了文字列に一致)。

preg_match("/^[a-zA-Z0-9]+$/", $value)
20
Kendall Hopkins
  • 終了アンカー$がありません
  • 乗数がありません
  • 終了区切り文字がありません

とにかく失敗するはずですが、動作する可能性がある場合は、文字列の先頭の1桁だけに一致します。

/^[a-z0-9]+$/i
13
KingCrunch

OPは文字と数字のみ(アンダースコアなし!)が欲しいと言ったので、これをphp regexで持つもう1つの方法は、posix式を使用することです:

/^[[:alnum:]]+$/

注:これは、Java、JavaScript、Python、Ruby、.NETでは機能しません

2
Andrew