我在这里搜索得很远但没有解决我的问题(php)。
场景:用户访问带有预先分配的注册号的登录页面(在datafile.txt中),当在字段中输入数字时,如果存在数字,脚本将搜索文件。
如果确实存在,请继续执行下一步。当下一步完成后,我希望它能够自动“删除”最初使用过的数字。
我相信在搜索“精确”匹配时,可以选择“搜索和替换”。
我的数据文件类似于以下内容:(datafile.txt)
0
12
123
1234
12345
123456
12,如果搜查,则与123不同。
几天前我非常友好地给出了一个脚本,这是为了完成另一项任务:
$numbers = file_get_contents("datafile.txt");
$uNumber = $_POST['uNum'];
if ( @preg_match( "/([^0-9]{$uNumber}[^0-9])/", $numbers ) ) {
echo "Numbers match";
}
我尝试为新任务做的是以下但没有成功:
$numbers = file_get_contents('datafile.txt', 'w+');
$uNumber = $_POST['uNum'];
if ( @preg_match( "/([^0-9]{$uNumber}[^0-9])/", $numbers ) ) {
$numbers = preg_replace('.$_Post["uNum"]','',$numbers);
echo "Existed but will be deleted from file. ";
} else {
echo "Message showed if not in file.";
}
非常感谢任何帮助。
答案 0 :(得分:1)
这个怎么样:
$index = file_get_contents("datafile.txt");
$bodycont = str_replace("string to be replaced","what you want that string to be",$index);
$fh = fopen("datafile.txt","w");
fwrite($fh,$bodycont);
fclose($fh);
OR:
$file = file("datafile.txt", FILE_IGNORE_NEW_LINES);
foreach($file as $text) {
$test[] = $text;
}
//get the size of the array
$arraysize = sizeof($test);
//use for loop to check if that string is found in the array and replace it
for($x=0;$x<$arraysize;$x++)
{
if($test[$x] == "$uNumber")
{
}
else
{
$newarray[] = $test[$x];
}
}
$stringData = implode("\n",$newarray );
$fh = fopen("datafile.txt","w");
fwrite($fh,$stringData );
fclose($fh);
这应该以某种方式工作。 :d
答案 1 :(得分:0)
如果每个行文件是一个数字,请使用^
和$
来限制正则表达式以匹配确切的模式。
preg_match( "/^({$uNumber})$/", $numbers)
答案 2 :(得分:0)
为什么使用Regex这么简单?你可以这样:
<?php
$numbers = file_get_contents("datafile.txt");
$uNumber = $_POST['uNum'];
$numbers = explode($numbers, "\n");
foreach ($numbers as $num) {
if ($num == $uNumber) {
unset($num);
}
}
$numbers = implode($numbers, "\n");
// some code that saves the file
?>