How to detect if a string has a new line break in it?

前端 未结 3 1218
旧时难觅i
旧时难觅i 2021-02-02 08:17

This doesn\'t work:

$string = \'Hello
    world\';

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


        
相关标签:
3条回答
  • 2021-02-02 08:22

    The most reliable way to detect new line in the text that may come from different operating systems is:

    preg_match('/\R/', $string)
    

    \R comes from PCRE and it is the same as: (?>\r\n|\n|\r|\f|\x0b|\x85|\x{2028}|\x{2029})

    The suggested answer to check PHP_EOL

    if(strstr($string, PHP_EOL)) {
    

    will not work if you are for example on Windows sytem and checking file created in Unix system.

    0 讨论(0)
  • 2021-02-02 08:29

    line break is \r\n on windows and on UNIX machines it is \n. so its search for PHP_EOL instead of "\n" for cross-OS compatibility, or search for both "\r\n" and "\n".

    0 讨论(0)
  • 2021-02-02 08:42

    Your existing test doesn't work because you don't use double-quotes around your line break character ('\n'). Change it to:

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

    Or, if you want cross-operating system compatibility:

    if(strstr($string, PHP_EOL)) {

    Also note that strpos will return 0 and your statement will evaluate to FALSE if the first character is \n, so strstr is a better choice. Alternatively you could change the strpos usage to:

    if(strpos($string, "\n") !== FALSE) {
      echo 'New line break found';
    }
    else {
      echo 'not found';
    }
    
    0 讨论(0)
提交回复
热议问题