如果字符串包含非字母数字字符,则将exp指定为Null /空字符串

时间:2010-07-04 00:08:27

标签: php regex preg-replace

如果字符串包含任何非字母数字字符或空格,我正在寻找一个php preg替换为null / empty字符串

e.g。字符串

$string = "This string is ok";
$string = "Thi$ string is NOT ok, and should be emptied"

当我说清空/无效时,我的意思是它会使字符串“”。

基本上任何东西a-z A-Z 0-9或空格都可以

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

if(preg_match('~[^a-z0-9 ]~i', $str))
      $str = '';

答案 1 :(得分:2)

您可以使用此模式(请注意占有量词)来匹配“无效”字符串:

^[a-zA-Z0-9 ]*+.+$

这是一个片段:

<?php

$test = array(
  "This string is ok",
  "Thi$ string is NOT ok, and should be emptied",
  "No way!!!",
  "YES YES YES"
);

foreach ($test as $str) {
  echo preg_replace('/^[a-zA-Z0-9 ]*+.+$/', '<censored!>', $str)."\n";
}

?>

以上打印(as seen on ideone.com):

This string is ok
<censored!>
<censored!>
YES YES YES

它通过使用所有格重复(即没有回溯)来与[a-zA-Z0-9 ]*+匹配尽可能多的有效字符。如果在此之后还剩下任何内容,即.+匹配,那么我们必须陷入无效字符,因此整个字符串会匹配(从而被替换)。否则字符串保持不变。

为了清楚起见,字符串'<censored!>'在此处用作替换;你可以使用空字符串'',如果你需要的话。

参考