0

文字列内のすべての記号を禁止したいのですが、それぞれを禁止する代わりに、英数字 (az AZ 0-9) を許可する方が簡単だと思いました。

文字列を解析して、許可された文字のみを含むものに変換するにはどうすればよいですか? また、スペースを に変換したいと思います_

現時点で私は持っています:

function parseFilename($name) {
    $allowed = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
    $name = str_replace(' ', '_', $name);

    return $name;
}

ありがとう

4

4 に答える 4

2

試す

$name = preg_replace("/[^a-zA-Z0-9]/", "", $name);
于 2012-05-16T20:09:02.987 に答える
1

findの/replaceパラメータとして配列を使用することで、両方の置換を一度に行うことができますpreg_match()

$str = 'abc def+ghi&jkl   ...z';
$find = array( '#[\s]+#','#[^\w]+#' );
$replace = array( '_','' );
$newstr = preg_replace( $find,$replace,$str );
print $newstr;

// outputs:
// abc_defghijkl_z

\s空白に一致し (単一のアンダースコアに置き換えられます)、@FJ が説明したように、^\w「単語文字ではない」ものです (空の文字列に置き換えられます)。

于 2012-05-16T23:20:24.447 に答える
0

preg_replace()ここに行く方法は次のとおりです。次のようにしてください。

function parseFilename($name) {
    $name = str_replace(' ', '_', $name);
    $name = preg_replace('/[^\w]+/', '', $name);
    return $name;
}

[^\w][^a-zA-Z0-9_]、英数字またはアンダースコア以外の任意の文字に一致します。+1 つ以上の一致を意味する後、これは各文字を個別に置き換えるよりもわずかに効率的です。

于 2012-05-16T20:13:34.570 に答える