2012-02-24 12 views
22

これは動作しません:文字列に新しい改行があるかどうかを検出するにはどうすればよいですか?

明らか
$string = 'Hello 
    world'; 

if(strpos($string, '\n')) { 
    echo 'New line break found'; 
} 
else { 
    echo 'not found'; 
} 

文字列がその中に「\ n」は文字を持っていないため。しかし、フォームフィールドでユーザーがEnterキーを押した結果、改行があるかどうかを確認するにはどうすればいいですか?

+1

'\ n'をPHP_EOLに置き換えてみてください。 –

+2

多分あなたは二重引用符を使うべきでしょう: '' \ n "'または 'preg_match( '/ [\ n \ r] /')' – biziclop

+0

フォームを入力したときにフォームを提出する方法が不思議ですか?もしそうなら、あなたはする必要はありません。送信ボタンが送信ボタンになっている限り、それは入力に提出する必要があります。 – CoffeeRain

答えて

50

改行文字('\n')の前後に二重引用符を使用しないため、既存のテストが機能しません。

if(strstr($string, PHP_EOL)) {

はまたstrposは0を返し、あなたの文は、最初の場合はFALSEと評価されますのでご注意:あなたは、クロスオペレーティングシステムとの互換性が必要な場合は、

if(strstr($string, "\n")) {

または:に変更してください文字は\nなので、strstrが良い選択です。また、あなたが変更される可能性strpos用法へ:

if(strpos($string, "\n") !== FALSE) { 
    echo 'New line break found'; 
} 
else { 
    echo 'not found'; 
} 
+2

親愛なるユーザーから受け取った行末はサーバーに依存するのではなく、ユーザーのコンピューターに依存していませんか? – biziclop

+0

私はちょうど広いストロークで話しています...私はいつも 'PHP_EOL'を使用していますので、私のコードはどんな状況でも動作します。しかし、ユーザーからのデータを扱っているなら、あなたは正しいでしょう。 – rdlowrey

+3

PHP_EOLはオペレーティングシステムによって異なるため、これは悪い答えです。 – kjdion84

3

改行は、Windows上で、それが\nあるUNIXマシン上\r\nです。 OS間の互換性のために "\ n"の代わりにPHP_EOLを検索するか、 "\ r \ n"と "\ n"の両方を検索してください。

+1

両方の改行に '\ n'が含まれている場合は、単純に"改行 "を検出するために、OS間の互換性を保つために' \ n'を本当に検索する必要があります。 – MrWhite

関連する問題