仅允许字符串中的某些字符

时间:2012-05-16 20:06:27

标签: php regex string

我想禁止字符串中的所有符号,而不是去禁止每一个符号,我认为只允许使用字母数字字符(a-z A-Z 0-9)会更容易。

我如何解析字符串并将其转换为只允许字符的字符串?我还想将任何空格转换为_

目前我有:

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

    return $name;
}

由于

4 个答案:

答案 0 :(得分:2)

尝试

$name = preg_replace("/[^a-zA-Z0-9]/", "", $name);

答案 1 :(得分: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匹配空格(替换为单个下划线),正如@ F.J所述,^\w是“不是单词字符”(用空字符串替换)。

答案 2 :(得分:0)

preg_replace()是前往此处的方式,以下内容应该符合您的要求:

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

[^\w]相当于[^a-zA-Z0-9_],它将匹配任何非字母数字或下划线的字符。 +之后的{{1}}表示匹配一个或多个,这应该比单独替换每个字符稍微有效。

答案 3 :(得分:0)

尝试使用HTML部分

pattern="[A-Za-z]{8}" title="Eight letter country code">