0

私のコード:

$q = array('r%and_dy', 'cat09', '##$%%^');

$result = preg_grep('/[a-zA-Z0-9]+/', $q);

print_r($result);

JavaScript で同じ正規表現を使用すると、'cat09' にのみ一致しますが、php では次のように返されます。

Array
(
    [0] => r%and_dy
    [1] => cat09
)

「cat09」のみを返すようにするには、何を書く必要がありますか?

編集: JavaScript を見たいです。「g」フラグを使用した JavaScript の match 関数は、php の preg_grep と同等の関数ですが、配列を受け入れません。これはフィドルで、各項目が個別の行になっています。http://jsfiddle.net/64A5w/

EDIT:jsfiddleがダウンしているため、これに相当するJavaScriptがあります。最初に言及する必要があるのは、preg_grep配列のみを受け入れ、グローバル マッチを自動的に返すことです (ag フラグは受け入れません)。Javascriptmatchは文字列のみを受け入れ、g を指定する必要があります。

var str = 'r%and_dy';
var result = str.match(/[a-zA-Z0-9]+/g);
document.write(result);

が表示されますr,and,dy。PHP に相当するものは、 preg_grep を渡すこと$str = array('r%and_dy')です。同じ配列を返す必要がありますr%and_dyが、単一の一致として返されます (上記のように)。

4

1 に答える 1

0

問題は、1 つ以上の英数字を含む文字列を照合していることです。試す:

$q = array('r%and_dy', 'cat09', '##$%%^');
$result = preg_grep('/^[a-zA-Z0-9]+$/', $q);    
print_r($result);

^とは、それぞれ文字列の$開始と終了を意味します。

マニュアルから:

指定されたパターンに一致する入力配列の要素で構成される配列を返します。

于 2013-03-30T19:56:26.200 に答える