2

我有这样的文件1248812832.v.doc,我想从数据库字段中删除字符串和点以使文件像这样1248812832.doc

我使用此代码,但它不能完美运行我仍然看到字符串和点

<?php
$host = 'localhost';
$username = 'root';
$password = '';
$database = 'alsidik';

$conn = mysql_connect($host, $username, $password);

if (!$conn) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}

if (!mysql_select_db($database)) {
    echo "Unable to select " . $database . ": " . mysql_error();
    exit;
}

$sql = "SELECT * FROM d_jobs";

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

while ($row = mysql_fetch_assoc($result)) {
    $id = $row['jb_id'];
    $jb_cv = $row['jb_cv'];
    $jb_rep = preg_replace('/[^.a-z0-9.]/','', $jb_cv);
    $sql = "UPDATE d_jobs set jb_cv='" .$jb_rep. "' where jb_id=" . $id;
    mysql_query($sql);
}

mysql_close($conn);
?>

谁能帮我..谢谢

4

2 回答 2

4

你没有说你想如何处理这个字符串:

$str = '1212.v.a.doc';

...所以我假设您只需要此字符串的第一部分和最后一部分(其中部分由“。”符号分隔)。有了这个,你可以使用...

$parts = explode('.', $str);
if (count($parts) > 2) {
  $str = "$parts[0].{$parts[count($parts)-1]}";
}

... 或者

$str = preg_replace('#(?<=[.])([^.]*[.])+#', '', $str);

这条线失败的原因:

preg_replace('/[^.a-z0-9.]/','', $jb_cv);

...是您在这里使用了否定字符类(由[^...]部分定义)。换句话说,您从字符串中删除除点、小写拉丁字母和数字之外的所有符号。我想这绝对不是我们想要的。事实上,它根本不会改变您示例中的原始字符串。

更新:看起来所有这些杂耍都是徒劳的,而您真正需要的只是数字和扩展名。好吧,它也可以用正则表达式来完成:

$str = '1212.v.a.doc';
$str = preg_replace('#^(\d+).*([.][^.]+)$#', '$1$2', $str);
echo $str;

...但事实上,我更喜欢@jeroen 的解决方案,以提高可读性。)

于 2012-10-03T14:27:19.183 回答
2

解决方案的替代explode方案:只需将其转换为int并将扩展重新打开:

$str = '1248812832abc.v.doc';

$name = (int) $str . '.' .pathinfo($str, PATHINFO_EXTENSION);

var_dump($name);

键盘上的示例

于 2012-10-03T14:44:09.030 回答