1

PHP を使用して、JavaScript ファイルを開き、特定の行の一部を取り出せるようにしたいと考えています。以下の例を使用すると、ファイルから「8:20am|8:20am」を削除し、他のすべてはそのままにします。

私の JavaScript ファイルは次のようになります。

var daylist = document.checkout.checkoutDay
var timelist = document.checkout.times
var times = new Array()
times[1]=["8:00am|8:00am", "8:20am|8:20am", "8:40am|8:40am", "9:00am|9:00am"]

配列には複数の行があり、それぞれの時間が異なる場合があるため、文字列がどこにあるのか正確にはわかりません。str_replace() と fopen() を使用してファイルを開くことを考えていましたが、行がどのように見えるかを事前に知らなければ、どの文字列を置き換えるかわかりません。何か案は?

4

4 に答える 4

1

PHP で JavaScript ファイルを操作すると、JavaScript は静的ファイルではなくなり、ブラウザーでキャッシュできなくなります。そのため、毎回再ダウンロードする必要があります。

そのtimes配列を JavaScript ファイルから完全に取り除き、<script>その変数を定義するだけのページのヘッダーに追加のタグを生成するように PHP コードを作成する方がよいでしょう。そうすれば、JavaScript コードの残りの部分を静的に保ちながら、時刻を動的に生成できます。

于 2012-04-27T06:43:02.737 に答える
1

これを試して:

<?php
$file = file_get_contents( 'MY_FILE.JS' );

$search = array( '"8:20am|8:20am"' );
$replace = array( '' );

$file = str_ireplace( $search, $replace, $file );
$file = preg_replace( '/(,\s*,)/', ',', $file ); // remove 2 consecutice commas.

file_put_contents( 'MY_FILE.JS', $file );
?>

それが役に立てば幸い。

于 2012-04-27T06:40:14.453 に答える
0

この特定の行のオカレンスのみを置き換えたい場合は、次のように使用できますpreg_replace()

<?php
$filename = 'yourfile.js';
$content = file_get_contents( $filename );

$search = '"8:20am|8:20am"';
$pattern = '/^(\s*times\[1\]\s*=\s*\[.*)(' . 
           preg_quote($search) .
           ',?\s*)(.*\]\s*;?)$/m';

$content = preg_replace( $pattern, '\1\3', $content ); 

file_put_contents( $filename, $content );
?>

結果:

var daylist = document.checkout.checkoutDay
var timelist = document.checkout.times
var times = new Array()
times[1]=["8:00am|8:00am", "8:40am|8:40am", "9:00am|9:00am"]

正規表現はかなり複雑に構築されており、一致にある程度の柔軟性を持たせることができます。任意の空白を許可し (これは JS でも有効です)、値がリストの中央にある場合はコンマを削除します。コンマがない場合でも、式は有効な結果を生成することに注意してください。(リストから最後の要素を削除したい場合)

于 2012-04-27T07:30:34.093 に答える
0

fopen() メソッドを試して、すべてのファイル コンテンツを php 変数で取得すると、str_replace() を使用して特定の文字列を検索および置換し、同じ js ファイルに書き込むことができます。

于 2012-04-27T06:44:15.120 に答える