字符串操作与正则表达式
电子邮件字符串格式化字符串的整理trim()
格式化字符串n12br()为打印输出而格式化字符串
字符串大小写格式化字符串以便储存
用字符串函数连接和分隔字符串explode() 函数strtok() 函数substr() 函数
字符串比较字符串排序字符串长度
使用字符串函数匹配和替换子字符串字符串中查找字符串查找子字符串替换子字符串
正则表达式字符集和类重复子表达式子表达式计数定位到字符串的开始或末尾分支匹配特殊字符电子邮件
用正则表达式查找字符串用正则表达式替换子字符串正则表达式分割字符串
电子邮件
bool
mail(string to
, string subject
, string message
,
string
[additional_headers
[, string additional_parameters
]]);
to 是邮件的目的地址subject 是主题行message 是消息内容第四个参数用来发送额外的、有效的邮件头(RFC822中有说明)
$additional_headers = "From: webserver@example.com\r\n" .
"Reply-To: bob@example.com";
第五个参数可以向任何经过配置用来发送电子邮件的程序传递参数。
字符串格式化
字符串的整理
trim()
$name = trim($_POST['name']);
trim() 函数可以除去字符串开始和结束位置的空格,并将字符串返回默认过滤的字符 : \n(换行) \r(回车) \t(水平制表符) \x0B(垂直制表符) \0(字符串结束符) 和空格也可以通过添加第二个参数,增加新的过滤的特殊字符ltrim() 和 rtrim() 分别从左边和右边去除空格
格式化字符串
n12br()
n12br($mailcontent);
使用<br >代替换行符 ‘\n’ ;
为打印输出而格式化字符串
printf() 将一个格式化的字符串输出到浏览器中sprintf() 返回衣蛾格式化了的字符串
echo "Total amount of order is $total";
printf("Total amount of order is %s", $total);
printf("Total amount of order is %.2f (with shipping %2f)", $total, $total_shipping);
格式如下%[ 'padding_character][ - ][ width ][ .precision ]type
printf("Total amount of order is %2\$.2f (with shipping %1\$.2f)",
$total_shipping, $total);
字符串大小写
格式化字符串以便储存
对于引号、斜杠和NULL需要进行转义处理,二部应该解释为控制符" => " \ => \
$feedback = addslashes(trim($_POST['feedback']));
$feedback = stripslashes($feedback);
用字符串函数连接和分隔字符串
explode() 函数
array explode(string separator
, string input
[, int limit
])
根据指定的分隔符字符串将字符串分隔为小块,返回到数组中,通过limit可以限制分成小块的数量。
$email_array = explode('@' , $email);
$new_email = join('@', $email_array);
$new_email = implode('@', $email_array);
implode() 和 join() 与explode() 函数效果相反;
strtok() 函数
string
strtok(string input
, string separator
);
$token = strtok($feedback, '"');
echo $token." <br \>";
while ($token != " "){
$token = strtok( " ");
echo $token." <br \>";
}
该函数会保持内部指针在字符串中的位置,所以不用再次传递需要处理的字符串
substr() 函数
string
substr(string string
, int start
[, int length
]);
$test = 'Your customer service is excellent';
substr($test, 1);
substr($test, -9);
substr($test, 0, 4);
substr($test, 5, -13);
字符串比较
字符串排序
strcmp(string str1
, string str2
);
str1 == str 2 return 0;str1 > str 2 return 1;str1 < str 2 return -1;strcasecmp() 函数和strcmp() 一样,只是不区分大小写;strnatcmp() 自然排序;
字符串长度
if (strlen($email) < 6){
echo 'That email adress is not valid';
exit
;
}
使用字符串函数匹配和替换子字符串
字符串中查找字符串
string
strstr(string haystack
, string needle
);
strstr() 函数和 strchr() 函数一样如果找到目标关键字的精确匹配,函数从目标关键字前面返回被搜索的字符串,否则返回false
$toaddress = "feedback@example.com"
if(strstr($feedback, 'shop'))
toaddress
= "retail@example.com";
elseif (strstr($feedback, 'delivery'))
...
stristr() 函数不区分大小写strrchr() 从最后出现目标关键字的位置的前面返回被搜索的字符串
查找子字符串
int
strpos(string haystack
, string needle
, int
[offset
]);
strpos() 比 strstr() 速度更快返回被搜索字符串中第一个出现目标关键字子字符串的位置
$test = "Hello world";
echo strpos($test, 'o');
echo strpos($test, 'o', 5)
offset 可以制定被搜索字符串的开始搜索位置strrpos() 返回被搜索字符串中最后一次出现目标关键字子字符串的位置如果不存在,返回false
替换子字符串
mixed
str_replace(mixed needle
, mixed new_needle
, mixed haystack
[, int
&count
])
可以以数组的方式传递所有参数
$feedback = str_replace($offcolor , '%!@*', $feedback);
string
substr_replace(string string
, string replacement
,
int start
, int
[length
]);
用replacement 替换string 中的一部分,由start和length制定
$test = substr_replace($test, 'X', -1);
length 表示php停止操作的位置,若不给定值,则会从start开始到字符串结束如果length为0,替换字符串会插入到字符串中。正length表示新字符串替换掉的字符串长度负length表示到字符串尾部倒数第几个停止替换。
正则表达式
POSIX 正则表达式易掌握,但是不是二进制安全的
字符集和类
用字符作为通配符代替除换行符(\n)以外的任一个字符.at 可以与 “cat” “sat” “mat” “#at” 匹配[a-z]at[aeiou][a-zA-Z][^a-z] 不匹配a-z
重复
[[:alnum:]]+*表示这个模式可以被重复0或更多次+表示这个模式可以被重复1或更多次符号放在表达式的后面
子表达式
(very )*large匹配"large" “very large” “very very large”
子表达式计数
(very ){1, 3}在花括号中指定内容允许重复的次数
定位到字符串的开始或末尾
^bob 在字符串开始处匹配bobcom$ 在字符串末尾处匹配com^[a-z]$ 匹配只包含a-z之中一个字符的字符串
分支
com|edu|net 表示com 或edu 或net
匹配特殊字符
需要增加 \若果要用$ 需要用"\\$" PHP 解释器解析为 \$ 正则表达式 解释为$
电子邮件
^[a-zA-Z0-9_-.]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$当字符类的开始或者末尾处使用点号时,点号失去其特殊通配符的意义,只能成为一个点号字符
用正则表达式查找字符串
int
ereg(string pattern
, string search
, array[matches
]);
eregi() 不区分大小写
if (!eregi('^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$', $email)){
echo '...';
exit
;
}
$toaddress = "feedback@example.com";
if (eregi("shop|customer service|retail", $feedback))
$toaddress = "retail@example.com";
用正则表达式替换子字符串
string
ereg_replace(string pattern
, string replacement
, string search
);
在search中查找字符串,用replacement 代替patterneregi_replacement() 不区分大小写
正则表达式分割字符串
array split(string pattern
, string search
[, int max
]);
把search 分割成符合正则表达式的字符串,然后将字符串返回到数组中,max指定进入数组的元素个数
$address = "username@example.com"
$arr = split('\.|@', $address);
while(list($key, $value) = each($arr)){
echo "<br />".$value;
}
一般而言,正则表达式运行效率要低于字符串函数。如果应用程序足够简单,那么就用字符串表达式。但是,对于可以通过单个正则表达式执行的任务来说,如果使用多个字符串函数,则是不对的。