Upload
ahmed-swilam
View
344
Download
1
Embed Size (px)
Citation preview
PHP Strings
Outline
What are Strings ?
• A string is a series of characters.• Can contain any arbitrary number of characters, the only
limit is the memory limit.
Ways To Write a String
Escaping characters
• Escaping is done using the backslash “\” character : $x = “He said \“I’m a developer\” ”;
$e = ‘He said ”I\’m a developer” ’;
$d = “ $z ”; // $d has the value of the variable $z
$r = “ \$z ”; // r has the value: $z
Special characters
• The most frequently used special characters we have are :
o \n : linefeed o \t : the tab ( a number of spaces )
• We can only output these characters in double quoted and heredoc strings.
• echo “Hi\n PHP”; // prints “Hi” then “PHP” in the next line
• echo ‘Hi \n PHP’; // prints “Hi \n PHP”
Curly syntax
• In double quoted and heredoc strings, you can have the following :
$x[10] = “great”;$x[‘name’] = “strings”;
$y = “ This is {$x[10]} ”; // This is great$z = “ {$x[‘name’]} are flexible.”; // strings are flexible.
Accessing characters
• Strings can be accessed like arrays to get a specific character :
$x = “String”;
echo $x[0]; // Secho $x[1]; // techo $x[2]; // r
String Operations
• Concatenation operator “.”:
$x = “Hello ” . “ world”; // Hello world
• Concatenating assignment operator :
$x = “Hello ”;$x .= “world” // Hello world
String Comparison
1. Can compare strings using “==“ operator :
if( $x == “Hi” )echo “yes”;
1. Can use strcmp() built-in function :
if( strcmp( $x, “Hi”) == 0 )echo “yes”;
1. Use strcasecmp() for case insensitive comparisons :
if( strcasecmp( “hi”, “Hi”) == 0 )echo “yes”;
String Length
The function strlen() returns the length of the string:
Example:
echo strlen( “A string” ); // 8
Searching Strings
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
Returns the numeric position of the first occurrence of needle in the haystack string.
Example:
$mystring = 'abc';$findme = 'a';$pos = strpos($mystring, $findme); // 0
Replacing Strings
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
This function returns a string or an array with all occurrences of search in subject replaced with the given replace value.
Example:
echo str_replace( “Hi”, “Hello”, “Hi strings.” ); // Hello strings.
Extracting Strings
string substr ( string $string , int $start [, int $length ] )
Returns the portion of string specified by the start and length parameters.
Example :
echo substr('abcdef', 1); // bcdef echo substr('abcdef', 1, 3); // bcdecho substr('abcdef', 0, 4); // abcdecho substr('abcdef', 0, 8); // abcdefecho substr('abcdef', -1, 1); // f
Splitting Strings
array explode ( string $delimiter , string $string [, int $limit ])
Returns an array of strings, each of which is a substring of string formed by splitting it on boundaries formed by the string delimiter.
Example :
$string = “this is a string";$pieces = explode(" ", $string);var_dump($pieces); // prints an array containing the parts
Joining Strings
string implode ( string $glue , array $pieces )
Join array elements with a glue string.
Example :
$array = array( “this”, “is”, “a”, “string” );$string= implode(" ", $array);echo $string; // this is a string
Exercise
Write a PHP function that reverses the string words, so If we have a string like this :
this is the php strings lesson
The function should return this :
lesson strings php the is this
Exercise solution
<?phpfunction reverse_words($string){ $result = ""; $exploded = explode(" ", $string); $reversed = array_reverse($exploded); $result = implode(" ", $reversed); return $result;}reverse_words( "this is the php strings lesson" );
?>
Formatting Strings
string number_format ( float $number , int $decimals = 0 , string $dec_point = '.' , string $thousands_sep = ',' )
This function formats a number according to the passed arguments.Example :
$number = 1234.5678;
$english_format_number = number_format($number, 2, '.', ''); // 1234.57
Formatting Strings
string sprintf ( string $format [, mixed $args [, mixed $... ]] )
Returns a string produced according to the formatting string format.
Exampleprintf(“My name is %s and my age is %d", “John”, 20 ); //
My name is John and my age is 20
For a complete list of details, visit : http://php.net/manual/en/function.sprintf.php
Regular Expressions
• Regular expressions ( Regex ) provide flexible means for matching strings of text.
• For example :How can I check whether the user supplied a valid e-mail or not ?
• There should be something that tells :Is the string like some characters/digits then @ then some characters/digits then .com ??? Here comes the regex.
Meta CharactersMeta characters are characters the have some special meanings in the regex pattern.
Character Description
\ general escape character with several uses
^ assert start of subject (or line, in multiline mode)
$ assert end of subject (or line, in multiline mode)
. match any character except newline (by default)
[ start character class definition
] End character class definition
| start of alternative branch
( Start of sub pattern
) End of sub pattern
Meta Characters
Character Description
? 0 or 1
* 0 or more
+ 1 or more
{ Start min/max number of occurrences
} End min/max number of occurrences
^ negate the class, but only if it is the first character
- Character range
Character Classes
Character classes define the type of characters in the regex pattern.
Class Description
\d Matches any numeric character - same as [0-9]
\D Matches any non-numeric character - same as [^0-9]
\s Matches any whitespace character - same as [ \t\n\r\f\v]
\S Matches any non-whitespace character - same as [^ \t\n\r\f\v]
\w Matches any alphanumeric character - same as [a-zA-Z0-9_]
\W Matches any non-alphanumeric character - same as [^a-zA-Z0-9_]
Regex ExamplesRegular
expression (pattern)
Match (Subject ) Not match Comment
world Hello world Hello JimMatch if the pattern is present anywhere in the subject
^world world class Hello worldMatch if the pattern is present at the beginning of the subject
world$ Hello world world classMatch if the pattern is present at the end of the subject
/world/i This WoRLd Hello Jim Makes a search in case insensitive mode
^world$ world Hello world The string contains only the "world"
world* worl, world, worlddd wor There is 0 or more "d" after "worl"
world+ world, worlddd worl There is at least 1 "d" after "worl"
Regex ExamplesRegular
expression (pattern)
Match (Subject ) Not match Comment
world? worl, world, worly wor, wory There is 0 or 1 "d" after "worl"
world{1} world worly There is 1 "d" after "worl"
world{1,} world, worlddd worly There is 1 ore more "d" after "worl"
world{2,3} worldd, worlddd world There are 2 or 3 "d" after "worl"
wo(rld)* wo, world, worldold wa There is 0 or more "rld" after "wo"
earth|world earth, world sun The string contains the "earth" or the "world"
Regex ExamplesRegular
expression (pattern)
Match (Subject ) Not match Comment
w.rld world, wwrld wrld Any character in place of the dot.
^.{5}$ world, earth sun A string with exactly 5 characters
[abc] abc, bbaccc sun There is an "a" or "b" or "c" in the string
[a-z] world WORLD There are any lowercase letter in the string
[a-zA-Z] world, WORLD, Worl12 123
There are any lower- or uppercase letter in the string
[^wW] earth w, W The actual character can not be a "w" or "W"
Regex Functions
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
Searches subject for a match to the regular expression given in pattern. It will stop by the first occurrence of the pattern.
Example:
$x = preg_match( “/php*/”, “phpppp”, $result ); // returns 1var_dump($result); // array(1) { [0]=> string(6) "phpppp" }
Regex Functions
int preg_match_all ( string $pattern , string $subject , array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]] )
Searches subject for a match to the regular expression given in pattern. It gets all the occurrences of the pattern in the string.
Example:
$x = preg_match_all( “/php/”, “phpp phpzz”, $result ); // returns 1
var_dump($result); // array(1) { [0]=> array(2) { [0]=> string(3) "php" [1]=> string(3) "php" } }
Regex Functions
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
Searches subject for matches to pattern and replaces them with replacement.
Example:
$x = preg_replace( “/php*/”, “hi” ,“phpp phppz”);
echo $x ; // hi hiz
Exercise
Write a PHP snippet that checks whether the user has entered a valid email or not ( the email should end with a .com ).
Exercise Solution
<?php
$email = "[email protected]";
if(preg_match("/[\w]+@[\w]+\.com/", $email) == 1 ) echo "Valid email";else echo "Invalid email";
?>
More info about Regex
For more info about regular expressions, please visit :
http://www.php.net/manual/en/reference.pcre.pattern.syntax.php
Assignment
1- Write a function that calculates the number of the words a string has.
2- Write a PHP script that matches the following phone numbers :
718 498 1043718 198-1043
What's Next?• Web Programming.
Questions?