php正则中文表达式

 更新时间:2016年11月25日 15:52  点击:2425

php教程正则中文表达式
$str = "abc一二三cde";
echo preg_replace('/[^x4e00-x9fa5]/i'," ",$str);

$str = "php编程";
if (preg_match("/^[x4e00-x9fa5]+$/u",$str)) {
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}

?>

<?php

$action?=?trim($_get['action']);

if($action?==?"sub")

{

$str?=?$_post['dir'];?

//if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."a-za-z0-9_]+$/",$str))?//gb2312汉字字母数字下划线正则表达式

if(!preg_match("/^[x{4e00}-x{9fa5}a-za-z0-9_]+$/u",$str))?//utf-8汉字字母数字下划线正则表达式

{?

echo?"<font?color=red>您输入的[".$str."]含有违法字符</font>";?

}

else?

{

echo?"<font?color=green>您输入的[".$str."]完全合法,通过!</font>";?

}

}

?>

<form?method="post"?action="?action=sub">

输入字符(数字,字母,汉字,下划线):

<input?type="text"?value="">

<input?type="submit"?value="提交">

</form>

php教程面向接口编程 耦合设计模式

关于接口的理解。   接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。   我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为理解的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点繁烦。   接口的本身反映了系统设计人员对系统的抽象理解。   接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);   第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);   一个体有可能有多个抽象面。   抽象体与抽象面是有区别的。   2.设计接口的另一个不可忽视的因素是接口所处的环境(context,environment),系统论的观点:环境是系统要素所处的空间与外部影响因素的总和。任何接口都是在一定的环境中产生的。因此环境的定义及环境的变化对接口的影响是不容忽视的,脱离原先的环境,所有的接口将失去原有的意义。   3.按照组件的开发模型(3c),它们三者相辅相成,各司一面,浑然一体,缺一不可。   面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法   面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现   接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题

我希望的是尽量少的修改代码,就能满足他的需要。我可以抽象如下接口:

以下为引用的内容:
package org.bromon.test;
public interface db
{
  java.sql.connection opendb(string url,string user,string password);
  void close();
}
 


这个接口只定义两个方法,没有任何有实际意义的代码,具体的代码由实作这个接口的类来给出,比如mysql教程.java:

以下为引用的内容:

package org.bromon.test;
import java.sql.*;
public class mysql implements db
{
  private string url=”jdbc:mysql:localhost:3306/test”;
  private string user=”root”;
  private string password=””;
  private connection conn;
  public connection opendb(url,user,password)
  {
    //连接数据库教程的代码
  }

  public void close()
  {
    //关闭数据库
  }
}
 

 

下面看实例

<?php
interface js{
function ys($a,$b);
}

class af implements js{

  function ys($a,$b){
     return "加法运算......结果为:".($a+$b);
   }
}

class jf implements js{

    function ys($a,$b){
    return "减法运算......结果为:".($a-$b);
    }
}
class aaf implements js{

    function ys($a,$b){
    return "乘法运算......结果为:".($a*$b);
    }
}
class jjf implements js{

    function ys($a,$b){
    return "除法运算......结果为:".($a/$b);
    }
}
class modf implements js{

    function ys($a,$b){
    return "取模运算......结果为:".($a % $b);
    }
}
class china implements js{
     public $varl=null;//这里直接:public $varl = new nothingx(); 会出错。
     function __construct(){
     $this->varl = new nothingx();
  }
     function ys($a,$b){
        return $this->varl->say();
     }
}
/*也可以用继承的方式实现哟:
class china extends nothingx implements js{
     function ys($a,$b){
     return parent::say();
     }
}
*/
class nothingx{
 function say(){
    return "我什么运算都不做...只是为了实现<font color=#990000><b>‘耦合设计模式’</b></font>...我是出来打酱油的......";
 }
}


class test{
   private $one;
   private $two;
   public function __construct($x,$y){
      $this->one=$x;
      $this->two=$y;
   echo "<font size=20px><strong>面向对象程序设计——接口</font></strong><hr>class test初始化:<br>属性$one=".$this->one."  属性$two=".$this->two."<hr>";
   }
   function display(js $a){
      return "<font color=#990000><b>用php接口技术实现的运算——开始运算啦:</b></font><hr>".$a->ys($this->one,$this->two)."<hr>";
   }
}
$t=new test(103,2);
$t1=new jf;
$t2=new china;
echo $t->display($t1);
echo $t->display($t2);
?>

好处

在小项目中,是体验不到的。使用接口编程,易于程序扩展,降低程序耦合性。
  举个常用的例子说吧,你有个方法为:public viod doxx(arraylist arraylist),方法调用时,参数必须为arraylist对象。某天,当参数需要更换为其他集合类时,必须更改代码;此时如果用接口的话,就不须了;将方法更改为public viod doxx(list list),方法调用时,参数就很灵活了,可以传入arraylist、linkedlist等等,这样从而降点耦合了。

php教程正则中文多种验证方法

gb2312汉字字母数字下划线正则表达式

preg_match("/^[".chr(0xa1)."-".chr(0xff)."a-za-z0-9_]+$/",$str);

再看一判断实例

$str = "中国";

//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) { //只能在gb2312情况下使用
if (preg_match("/^[x7f-xff]+$/", $str)) { //兼容gb2312,utf-8
echo "正确输入";
} else {
echo "错误输入";
}

编码表

双字节字符编码范围

1. gbk (gb2312/gb18030)
x00-xff gbk双字节编码范围
x20-x7f ascii
xa1-xff 中文 gb2312
x80-xff 中文 gbk

2. utf-8 (unicode)

u4e00-u9fa5 (中文)
x3130-x318f (韩文
xac00-xd7a3 (韩文)
u0800-u4e00 (日文)

php正则表达式匹配中文的

preg_match('/^[xa1-xff0-9a-za-z]+$/',$val)

更详细代码

$val=$_get[name];
if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $val))
  {
//要执行的表达式
   }
else
{
//要执行的表达式
}


php中来判断字符串是否为中文

if (preg_match("/^[u4e00-u9fa5]+$/",$str)) {
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}

 

php教程 用户名正则表达式(中文,英文,数字,字母)
由字母a~z(不区分大小写)、数字0~9、减号或下划线组成
只能以数字或字母开头和结尾 用户名长度为4~18个字符

^[a-za-z0-9]{1}[a-za-z0-9|-|_]{2-16}[a-za-z0-9]{1}$

用户名为大写字母小写字母或下划线,并以字母开头,长度为6-20

^[a-za-z][wd_]{5,19}

用户名:包括英文小写、汉字、数字、下划线,不能全部是数字,下划线不能在末尾

/^[a-z0-9_u4e00-u9fa5]+[^_]$/g

utf-8下

preg_match("/^[a-z0-9_x80-xff]+[^_]$/g",$a);

gbk下:

preg_match("/^[a-z0-9_".chr(0xa1)."-".chr(0xff)."]+[^_]$/",$a)

可有中文的用户名验证

[a-za-z0-9][u4e00-u9fa5]


由于我们写的表达式是匹配一个字符串的任何部分。它将不止认为'mike_84′是合法字符串,同样也会匹配类似'%! mike_84&'这种包含了我们不希望出现的东西的字符串。我们需要用到行定位点, ^ (caret) 和 $ (dollar) 字符将把我们的表达式限制在一个字符串的起点和终点位置,这样可以确保整个用户名符合我们的设定,而不是一部分。

所以修订版的正则表达式象这样:
/^[a-za-z0-9_]{3,16}$/

果直接用php教程函数“str_split”来分割,会出现乱码,因为中文字符长度和英文字符长度是不一样的。但是我们可以建立新的函数先把字符转成ascii值,接着通过判断不同字符的长度来正确分割中文字符串,把结果存入数组,最后再用php函数“join”在字符间插入百分号

<?php
function str_split_utf8($str){
 $split=1;
 $array=array();
 for($i=0;$i<strlen($str)){
  $value=ord($str[$i]);
  if($value>127){
   if($value>=192&&$value<=223) $split=2;
   elseif($value>=224 && $value<=239) $split=3;
   elseif($value>=240 && $value<=247) $split=4;
  }else{
   $split=1;
  }
  $key=null;
  for($j=0;$j<$split;$j++,$i++){
   $key.=$str[$i];
  }
  array_push($array,$key);
 }
 return $array;
}
$string="一聚教程网www.111cn.net";
$arr1=str_split_utf8($string);
echo join("%",$arr1);
?>

方法二

 

<?php
$str="一聚教程网:http://www.111cn.net";
function mbstringtoarray($str,$charset) {
    $strlen=mb_strlen($str);
    while($strlen){
        $array[]=mb_substr($str,0,1,$charset);
        $str=mb_substr($str,1,$strlen,$charset);
        $strlen=mb_strlen($str);
    }
    return $array;
}
$arr=mbstringtoarray($str,"gb2312");
?>


  注意:

  1、$charset变量为网页编码,如"gb2312"或"utf-8";

  2、使用方法一要求服务器必须开启mbstring.dll扩展,否则代码执行错误,所以对于使用虚拟主机的朋友,可以考虑使用第二种方法。

  方法二:

<?php
function str_to_arr($str){
 $l=strlen($str);
 for($i=0;$i<$l;$i++){
  $arr[]=ord($str[$i])>127?$str[$i].$str[++$i]:$str[$i];
 }
 return $arr;
}
$arr=str_to_arr($str);
?>
[!--infotagslink--]

相关文章

  • js URLdecode()与urlencode方法支持中文解码

    下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20
  • PHP正则表达式取双引号内的内容

    取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24
  • C#读取中文文件出现乱码的解决方法

    这篇文章主要介绍了C#读取中文文件出现乱码的解决方法,涉及C#中文编码的操作技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • Mysql在debian系统中不能插入中文的终极解决方案

    在debian环境下,彻底解决mysql无法插入和显示中文的问题Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql>use...2013-10-04
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • 一个关于JS正则匹配的踩坑记录

    这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
  • php 验证只能输入汉字、英语、数字的正则表达式

    正则表达式是一门非常有用的并且进行模糊判断的一个功能了,我们下面来看通过正则来验证输入汉字、英语、数字,具体如下。 收藏了正则表达式。可以验证只能输入数...2016-11-25
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • 常用的日期时间正则表达式

    常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25
  • PHP正则表达式匹配验证提取网址URL实例总结

    网址规则是可寻的,所以我们可以使用正则表达式来提取字符串中的url地址了,下面一起来看看小编整理的几个PHP正则表达式匹配验证提取网址URL实例. 匹配网址 URL 的...2016-11-25
  • Java连接数据库oracle中文乱码解决方案

    这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16
  • 正则表达式中两个反斜杠的匹配规则详解

    这篇文章主要介绍了正则表达式中两个反斜杠的匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • JS中使用正则表达式g模式和非g模式的区别

    这篇文章给大家详细介绍了JS中使用正则表达式g模式和非g模式的区别,非常不错,具有参考借鉴价值,需要的朋友参考下吧...2017-04-03
  • C#正则表达式使用方法示例

    这篇文章主要介绍了C#正则表达式使用方法,大家参考使用...2020-06-25
  • 常用C#正则表达式汇总介绍

    c#正则表达式,用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。...2020-06-25
  • JavaScript利用正则表达式替换字符串中的内容

    本文主要介绍了JavaScript利用正则表达式替换字符串中内容的具体实现方法,并做了简要注释,便于理解。具有一定的参考价值,需要的朋友可以看下...2017-01-09