ML
    • Recent
    • Categories
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Solved Need to split this string in PHP

    IT Discussion
    php string split
    4
    15
    1.1k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • JaredBuschJ
      JaredBusch @JasGot
      last edited by

      @jasgot said in Need to split this string in PHP:

      @jaredbusch said in Need to split this string in PHP:

      I have this bit of information.
      "Jitsi2.10.5550Windows 10"

      I need to split it into

      $brand = "Jitsi";
      $model = "Windows 10";
      $firmware = "2.10.5550";
      

      Jitsi is fixed, so easy to substring.

      But the model and firmware not so much for me this morning.

      I don't know what you are working on, so this may not work, but if you knew all known firmwares, you could put them in an array and then when you have a hit, all that remains is the OS.

      it is a user agent sent by a sip register
      623f32c1-ffe4-4063-ab32-9adf09aa88d2-image.png

      dafyreD 1 2 Replies Last reply Reply Quote 0
      • dafyreD
        dafyre @JaredBusch
        last edited by

        @jaredbusch Is the Jitsi version always the same length? If so you could do it with some substr() magic.

        J 1 Reply Last reply Reply Quote 0
        • J
          JasGot @dafyre
          last edited by JasGot

          @dafyre said in Need to split this string in PHP:

          @jaredbusch Is the Jitsi version always the same length? If so you could do it with some substr() magic.

          Probably not, version 12.10.5550 is one char longer. (Assuming they will get to bigger versions someday.)

          1 Reply Last reply Reply Quote 1
          • 1
            1337 @JaredBusch
            last edited by 1337

            @jaredbusch said in Need to split this string in PHP:

            @jasgot said in Need to split this string in PHP:

            @jaredbusch said in Need to split this string in PHP:

            I have this bit of information.
            "Jitsi2.10.5550Windows 10"

            I need to split it into

            $brand = "Jitsi";
            $model = "Windows 10";
            $firmware = "2.10.5550";
            

            Jitsi is fixed, so easy to substring.

            But the model and firmware not so much for me this morning.

            I don't know what you are working on, so this may not work, but if you knew all known firmwares, you could put them in an array and then when you have a hit, all that remains is the OS.

            it is a user agent sent by a sip register
            623f32c1-ffe4-4063-ab32-9adf09aa88d2-image.png

            Use a regular expression to split it.

            The first group is letters, second is numbers and dots (perhaps some - and / as well), third group start with letters and ends at the end of the string.

            Use this function: preg_match($regex, $string, $result)
            https://www.php.net/manual/en/function.preg-match.php

            JaredBuschJ 1 Reply Last reply Reply Quote 1
            • dafyreD
              dafyre
              last edited by

              If the preg_match stuff is too aggravating, I have a way that might work.

              It's ugly and hacky, but I tested it with two random strings and it seems to format like you want it...

              It returns an array.

              <?php
              
              function parseUA($string) {
              $arrString=str_split($string);
              $model=substr($string,0,5);
              
              $i=0;
              $modStart=0;
              $modStop=0;
              $fwStart=0;
              $fwStop=0;
              $brandStart=0;
              $brandStop=0;
              
              $prevChar="";
              
              $model="";
              $brand="";
              $firmware="";
              
              while ($i < strlen($string)) {
              	if ($i==0) { 
              		$curChar=current($arrString); 
              	} 
              	elseif ($i < strlen($string)) {
              		$prevChar=current($arrString);
              		$curChar=next($arrString);
              		if (is_string($prevChar) && is_numeric($curChar) && $model=="") {
              			$model=substr($string,0,$i);
              			$fwStart=$i;
              		}
              		//echo "Starting Firmware: $firmware<br>";
              		if ($model<>"" && $curChar<>"." ) {
              			if (is_numeric($prevChar)==true && is_numeric($curChar)==false) {
              				$fwStop=$i;
              				$brand=substr($string,$i,strlen($string)-$fwStop*-1);
              				$firmware=substr($string,$fwStart,-strlen($brand));		
              		 }
              		}
              	}
              	//echo "$i <br>";
              	$i++;
              }
              	return array($brand,$firmware,$model);
              }
              
              $myString="HatsOff9.10.5Crash Tester";
              //$myString="Jitsi2.10.5550Windows 10";
              
              $myData=parseUA($myString);
              
              //print_r($myData);
              $model=$myData[2];
              $firmware=$myData[1];
              $brand=$myData[0];
              
              
              
              
              
              
              echo "Model: $model";
              echo "<br>";
              echo "Brand: $brand";
              echo "<br>";
              echo "Firmware: $firmware";
              echo "<br>";
              
              1 1 Reply Last reply Reply Quote 1
              • 1
                1337 @dafyre
                last edited by

                @dafyre said in Need to split this string in PHP:

                If the preg_match stuff is too aggravating, I have a way that might work.

                It's ugly and hacky, but I tested it with two random strings and it seems to format like you want it...

                It returns an array.

                I'm impressed by the effort!

                dafyreD 1 Reply Last reply Reply Quote 1
                • dafyreD
                  dafyre @1337
                  last edited by

                  @pete-s said in Need to split this string in PHP:

                  @dafyre said in Need to split this string in PHP:

                  If the preg_match stuff is too aggravating, I have a way that might work.

                  It's ugly and hacky, but I tested it with two random strings and it seems to format like you want it...

                  It returns an array.

                  I'm impressed by the effort!

                  Some of us do not get along with regex, lol.

                  1 1 Reply Last reply Reply Quote 0
                  • 1
                    1337 @dafyre
                    last edited by

                    @dafyre said in Need to split this string in PHP:

                    @pete-s said in Need to split this string in PHP:

                    @dafyre said in Need to split this string in PHP:

                    If the preg_match stuff is too aggravating, I have a way that might work.

                    It's ugly and hacky, but I tested it with two random strings and it seems to format like you want it...

                    It returns an array.

                    I'm impressed by the effort!

                    Some of us do not get along with regex, lol.

                    I cheat...always. I try it out with something like https://regex101.com/

                    1 Reply Last reply Reply Quote 2
                    • 1
                      1337
                      last edited by 1337

                      Try this:
                      https://regex101.com/r/Mv2Wlc/1
                      It's very educational if you hover over the different parts of the regexp.

                      To use the regexp in php to split the string:

                         $s='Jitsi2.10.5550Windows 10';
                         $regexp='/(\D+)([\d\.]+)(\D+.*)/';
                         preg_match($regexp, $s, $result);
                      	
                         print_r($result);
                      

                      Results in this output:

                      Array
                      (
                          [0] => Jitsi2.10.5550Windows 10
                          [1] => Jitsi
                          [2] => 2.10.5550
                          [3] => Windows 10
                      )
                      

                      Then use for example $result[1] for the brand.

                      dafyreD 1 Reply Last reply Reply Quote 3
                      • dafyreD
                        dafyre @1337
                        last edited by

                        @pete-s said in Need to split this string in PHP:

                        Try this:
                        https://regex101.com/r/Mv2Wlc/1
                        It's very educational if you hover over the different parts of the regexp.

                        To use the regexp in php to split the string:

                           $s='Jitsi2.10.5550Windows 10';
                           $regexp='/(\D+)([\d\.]+)(\D+.*)/';
                           preg_match($regexp, $s, $result);
                        	
                           print_r($result);
                        

                        Results in this output:

                        Array
                        (
                            [0] => Jitsi2.10.5550Windows 10
                            [1] => Jitsi
                            [2] => 2.10.5550
                            [3] => Windows 10
                        )
                        

                        Then use for example $result[1] for the brand.

                        Thanks for that!

                        1 Reply Last reply Reply Quote 0
                        • JaredBuschJ
                          JaredBusch @1337
                          last edited by

                          @pete-s said in Need to split this string in PHP:

                          @jaredbusch said in Need to split this string in PHP:
                          Use a regular expression to split it.

                          I always post here because, someone will almost always post a regex that is either correct or damned close before I can get back to things..

                          1 Reply Last reply Reply Quote 0
                          • JaredBuschJ
                            JaredBusch @JasGot
                            last edited by JaredBusch

                            @jasgot said in Need to split this string in PHP:

                            @jaredbusch said in Need to split this string in PHP:
                            I don't know what you are working on,

                            This:
                            https://github.com/sorvani/freepbx-helper-scripts/commit/23ef9bd7aca3d791217aab86ddd53b30d7838563

                            199bb6cd-16f7-40f9-aee9-3fa8e980e528-image.png

                            JaredBuschJ 1 Reply Last reply Reply Quote 1
                            • JaredBuschJ
                              JaredBusch @JaredBusch
                              last edited by

                              @jaredbusch said in Need to split this string in PHP:

                              This:
                              https://github.com/sorvani/freepbx-helper-scripts/commit/23ef9bd7aca3d791217aab86ddd53b30d7838563

                              And yes @Pete-S or @JasGot whichever one of you always yells at me to not use " I know I need to clean that code up more 🙂

                              1 Reply Last reply Reply Quote 0
                              • 1 / 1
                              • First post
                                Last post