我如何避免以下情况:
$_SESSION['myVar']=preg_match("[^a-zA-Z]",'',$_SESSION['myVar']);
echo $_SESSION['myVar'];
显示器
0
而是显示/输出var内容? preg_match 提供混合类型,但这不应该是问题......
为什么,字符串本身的值不能用echo来解决(通过 comapring 其内容, OK )?
以前我有
$_SESSION['myVar']=ereg_replace("[^a-zA-Z]",'',$_SESSION['myVar']);
蚂蚁输出óf ereg_replace 正确显示了变量内容。
答案 0 :(得分:4)
PHP中的PCRE需要delimiters [docs],您可能需要preg_replace
[docs]:
preg_replace("/[^a-zA-Z]/",'',$_SESSION['myVar']);
假设您有preg_replace
,即使这样,括号([...]
)也会被解释为分隔符,因此引擎会尝试匹配字符串开头的a-zA-Z
和不会将构造函数解释为字符类。
答案 1 :(得分:1)
preg_match
返回一个int,而不是混合:http://php.net/manual/en/function.preg-match.php
使用matches参数获取匹配项。
答案 2 :(得分:1)
问题是preg_match返回一个布尔值,如果模式匹配则返回1,否则返回0。 preg_match只是匹配事件,它不会替换它们。以下是使用preg_match的方法:
$matched = array();
preg_match("/[^a-zA-Z]/", $_SESSION["myVar"], $matches);
print_r($matches); // All matches are in the array.