Notepad++ 中如何将代码格式化 - 玻尔兹曼机 - 博客园

mikel阅读(899)

来源: Notepad++ 中如何将代码格式化 – 玻尔兹曼机 – 博客园

在阅读别人的代码时偶尔会遇到格式很乱,阅读起来很费劲的情况,若手动改,很容易出错且很费时间,这时可以借助一些专业的编辑器来格式化代码,NotePad++是一个轻量级的代码编辑器,占用内存少,运行速度快,但是Notepad++本身是不带这个格式化功能的,但他支持NppAStyle插件 完成格式化。

  1. 安装Notepad++,安装包下载: http://rj.baidu.com/soft/detail/13478.html?ald

     

  2. 下载自动格式插件:NppAStyle.dll ,既可以在Notepad中选择  插件–>Pligin Manager–>show Plugin Manager–>安装NppAStyle插件,也可以直接下载NppAStyle插件, 链接:http://pan.baidu.com/s/1kTzcQV1

     

  3. 然后找到你安装的Notepad++的安装目录,(最简单的方法就是在你使用的Notepad++的快捷方式的属性里点”打开文件位置”)。进入后我们打开plugins文件夹,把刚才解压的NppAStyle.dll复制到这里。

 

 

  1. 重启NotePad++,在插件菜单栏会出现NppAStyle选项

 

2.配置NppAStyle。

点击菜单栏中的”插件”—>”NppAStyle”—>”options”,在代码风格中选择合适的风格,如java,或Stroustrup

 

 

 


 

打开格式较乱的代码,用Alt+F键进行格式化

格式前

 

格式化后:

 

部分转载于Worldsing的博客,http://www.cnblogs.com/worldsing/p/4174191.html

php 实现不用递归的树形数组构造函数 无限级分类

mikel阅读(916)


/**
* 创建父节点树形数组
* 参数
* $ar 数组,邻接列表方式组织的数据
* $id 数组中作为主键的下标或关联键名
* $pid 数组中作为父键的下标或关联键名
* 返回 多维数组
**/
function find_parent($ar, $id='id', $pid='pid') {
foreach($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
if( $item[$pid] ){
if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) )
$t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]];
}
}

var_dump($t);
}

/**
* 创建子节点树形数组
* 参数
* $ar 数组,邻接列表方式组织的数据
* $id 数组中作为主键的下标或关联键名
* $pid 数组中作为父键的下标或关联键名
* 返回 多维数组
**/
function find_child($ar, $id=’id’, $pid=’pid’) {
foreach($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
if( $item[$pid] ) {
$t[$item[$pid]][‘child’][$item[$id]] =& $t[$k];
}
}
var_dump($t);
}

$data = array(
array(‘ID’=>1, ‘PARENT’=>0, ‘NAME’=>’祖父’,’des’=>’祖父是一个和蔼可亲的人.’),
array(‘ID’=>2, ‘PARENT’=>1, ‘NAME’=>’父亲’,’des’=>’父亲是一个和蔼可亲的人.’),
array(‘ID’=>3, ‘PARENT’=>1, ‘NAME’=>’叔伯’,’des’=>’叔伯是一个和蔼可亲的人.’),
array(‘ID’=>4, ‘PARENT’=>2, ‘NAME’=>’自己’,’des’=>’自己是一个和蔼可亲的人.’),
array(‘ID’=>5, ‘PARENT’=>4, ‘NAME’=>’儿子’,’des’=>’儿子是一个乖顺孩子.’),
array(‘ID’=>6, ‘PARENT’=>5, ‘NAME’=>’孙女’,’des’=>’孙女是一个乖顺孩子.’),
array(‘ID’=>7, ‘PARENT’=>5, ‘NAME’=>’孙子’,’des’=>’孙子是一个乖顺孩子.’),

);

$p = find_parent($data, ‘ID’, ‘PARENT’);
$c = find_child($data, ‘ID’, ‘PARENT’);

php把数据集转换成树状结构,无限极分类生成树状 - CSDN博客

mikel阅读(1486)

直接上代码,在onethink里面使用的转换树状结构/** * 把返回的数据集转换成Tree * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * @param string $level level标记字段 * @return array * @author 麦当苗儿 */function li

来源: php把数据集转换成树状结构,无限极分类生成树状 – CSDN博客

方法1

直接上代码,在onethink里面使用的转换树状结构

/**
* 把返回的数据集转换成Tree
* @param array $list 要转换的数据集
* @param string $pid parent标记字段
* @param string $level level标记字段
* @return array
* @author 麦当苗儿
*/
function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) {
// 创建Tree
$tree = array();
if(is_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data) {
$refer[$data[$pk]] =& $list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[] =& $list[$key];
}else{
if (isset($refer[$parentId])) {
$parent =& $refer[$parentId];
$parent[$child][] =& $list[$key];
}
}
}
}
return $tree;
}

ps:这个函数最主要的是通过&引用(引用:同一个变量,不同的名字。与c指针不同,指针里面是变量的内容,是内存中的地址。)
$refer[$data[$pk]] = & $list[$key];

这里的$refer[$data[$pk]]就是引用了 $list[$key] 地址了

$tree这个变量也是引用的$list里面的内容

返回$tree就是返回$list里面的内容
方法2

function generateTree2($rows, $id='id', $pid='pid'){
$items = array();
foreach ($rows as $row) $items[$row[$id]] = $row;
foreach ($items as $item) $items[$item[$pid]]['son'][$item[$id]] = &$items[$item[$id]];
return isset($items[0]['son']) ? $items[0]['son'] : array();
}

1,和上面的一样,创建基于主键的数组
2,通过引用到父级分类下面

delphi中Bmp转Jpeg JPG转BMP - CSDN博客

mikel阅读(1444)

;—-Bmp转Jpeg—– uses Jpeg;procedure TForm1.Button1Click(Sender: TObject);VarJpg : TJpegImage;BMP : TBitMap ;beginJpg :=TJpegImage.Create;BMP :=TBitmap.Create;BMP.LoadFromFile(H:/Avi_图_Wav/跳.bm

来源: delphi中Bmp转Jpeg JPG转BMP – CSDN博客


;----Bmp转Jpeg-----

uses Jpeg;
procedure TForm1.Button1Click(Sender: TObject);
Var
Jpg : TJpegImage;
BMP : TBitMap ;
begin
Jpg :=TJpegImage.Create;
BMP :=TBitmap.Create;
BMP.LoadFromFile(‘H:/Avi_图_Wav/跳.bmp’);
Jpg.Assign(BMP);
Jpg.SaveToFile(‘H:/Avi_图_Wav/跳.Jpg’ );
BMP.Free ;
Jpg.Free;
end;

//—————JPG转BMP—————–

procedure TForm1.Button1Click(Sender: TObject);
var
MyJPEG : TJPEGImage;
MyBMP : TBitmap;
begin
MyJPEG := TJPEGImage.Create;
with MyJPEG do begin
LoadFromFile(‘UwJpegHier.JPEG’);
MyBMP := TBitmap.Create;
with MyBMP do begin
Width := MyJPEG.Width;
Height := MyJPEG.Height;
Canvas.Draw(0,0,MyJPEG);
SaveToFile(‘UwBmpHier.BMP’);
Free;
end;
Free;
end;
end;
===========================================================
//JPEG and bitmaps
var
MyJpeg: TJpegImage;
Image1: TImage;
begin
Image1:= TImage.Create;
MyJpeg:= TJpegImage.Create;
Image1.LoadFromFile(‘TestImage.BMP’); // Load the Bitmap from a file
MyJpeg.Assign(Image1.Picture.Bitmap); // Assign the BitMap to MyJpeg
object
MyJpeg.SaveToFile(‘MyJPEGImage.JPG’); // Save the JPEG to Disk
end;
—————————————-
jpg 转换成 bmp
…convert jpg to bmp ?

Var
jpeg: TJPEGImage;
bmp: TBitmap;
Begin
jpeg:= TJPEGImage.Create;
try
jpeg.LoadFromFile( filename );
bmp:= TBitmap.Create;
try
bmp.Assign( jpeg );
bmp.SaveTofile( ChangeFileExt( filename, ‘.BMP’ ));
finally
bmp.free
end;
finally
jpeg.free
end;
end;
——————————————-
procedure TForm1.Button1Click(Sender: TObject);
var
bmp : TBitmap;
jpg : TJpegImage;
begin
bmp := TBitmap.Create;
jpg := TJpegImage.Create;
jpg.LoadFromFile ( ‘G:/VCL/Menu_Directory/彩色面版/RIVER.JPG ‘ );
bmp.Assign( Jpg);
bmp.SaveToFile ( ‘G:/VCL/Menu_Directory/彩色面版/RIVER.bmp’ );
jpg.Free;
bmp.Free;
end;
———————————
convert jpg to bmp ?
Var jpeg: TJPEGImage;
bmp: TBitmap;
Begin
jpeg:= TJPEGImage.Create;
try jpeg.LoadFromFile( filename );
bmp:= TBitmap.Create;
try bmp.Assign( jpeg );
bmp.SaveTofile( ChangeFileExt( filename, ‘.BMP’ ));
finally
bmp.free
end; finally
jpeg.free
end;
end;
==========================================================

ThinkPHP3.2中引入JS,CSS文件路径配置 - CSDN博客

mikel阅读(1399)

在ThinkPHP3.2框架中,默认已经没有Public文件夹了。其中对于__PUBLIC__的定义也需要重新定义。这给笔者造成了很长时间的困扰,现在这个问题终于解决,分享出来给大家参照一下。 在ThinkPHP中config文件中进行一下配置即可。//重定义网站的一些URL地址 /* 模板相关配置 */ ‘TMPL_PARSE_STRING’ => array(

来源: ThinkPHP3.2中引入JS,CSS文件路径配置 – CSDN博客

在ThinkPHP3.2框架中,默认已经没有Public文件夹了。其中对于__PUBLIC__的定义也需要重新定义。这给笔者造成了很长时间的困扰,现在这个问题终于解决,分享出来给大家参照一下。
在ThinkPHP中config文件中进行一下配置即可。

//重定义网站的一些URL地址
    /* 模板相关配置 */
    'TMPL_PARSE_STRING' => array(
        '__PUBLIC__' => __ROOT__ . '/Public',
        '__JS__' => __ROOT__ . '/Public/Js',
        '__CSS__' => __ROOT__ . '/Public/Css',
        '__IMAGE__' => __ROOT__ . '/Public/Image',
        '__DATA__' => __ROOT__ . '/Data/'
    ),

在ThinkPHP3.2中其中__ROOT__ 默认找到项目的根路径,利用这种方式即可定义网站后台各级文件夹的路径,便于更好的查找相关文件。

修改:实质上在ThinkPHP3.2中有__PUBLIC__常量的设置。
__ROOT__ php常量在Thinkphp/ThinkPHP.php中定义
__PUBLIC__ 模板常量在ThinkPHP\Library\Behavior\ContentReplaceBehavior.class.php 文件中定义

<?php
namespace Behavior;
/**
 * 系统行为扩展:模板内容输出替换
 */
class ContentReplaceBehavior {

    // 行为扩展的执行入口必须是run
    public function run(&$content){
        $content = $this->templateContentReplace($content);
    }

    /**
     * 模板内容替换
     * @access protected
     * @param string $content 模板内容
     * @return string
     */
    protected function templateContentReplace($content) {
        // 系统默认的特殊变量替换
        $replace =  array(
            '__ROOT__'      =>  __ROOT__,       // 当前网站地址
            '__APP__'       =>  __APP__,        // 当前应用地址
            '__MODULE__'    =>  __MODULE__,
            '__ACTION__'    =>  __ACTION__,     // 当前操作地址
            '__SELF__'      =>  __SELF__,       // 当前页面地址
            '__CONTROLLER__'=>  __CONTROLLER__,
            '__URL__'       =>  __CONTROLLER__,
            '__PUBLIC__'    =>  __ROOT__.'/Public',// 站点公共目录
        );
        // 允许用户自定义模板的字符串替换
        if(is_array(C('TMPL_PARSE_STRING')) )
            $replace =  array_merge($replace,C('TMPL_PARSE_STRING'));
        $content = str_replace(array_keys($replace),array_values($replace),$content);
        return $content;
    }

}

可以看出其中已经定义好了__PUBLIC__路径,假如需要重新定义,在相关的配置文件中定义TMPL_PARSE_STRING模板就会自动完成相同名称的替换。

在ThinkPHP的模板中使用已定义的路径,可以使用C方法

C('TMPL_PARSE_STRING.PUBLIC')
  • 1

附录:关于ThinkPHP中的U方法
U方法用于完成对URL地址的组装,特点在于可以自动根据当前的URL模式和设置生成对应的URL地址,格式为:

U('地址','参数','伪静态','是否跳转','显示域名');
  • 1

在模板中使用U方法而不是固定写死URL地址的好处在于,一旦你的环境变化或者参数设置改变,你不需要更改模板中的任何代码。
在模板中的调用格式需要采用 {:U('地址', '参数'…)} 的方式

基本用法
U方法的用法示例:

U('User/add') // 生成User模块的add操作地址

也可以支持分组调用:

U('Home/User/add') // 生成Home分组的User模块的add操作地址

当然,也可以只是写操作名,表示调用当前模块的

U('add') // 生成当前访问模块的add操作地址

除了分组、模块和操作名之外,我们也可以传入一些参数:

U('Blog/read?id=1') // 生成Blog模块的read操作 并且id为1的URL地址

U方法的第二个参数支持传入参数,支持数组和字符串两种定义方式,如果只是字符串方式的参数可以在第一个参数中定义,下面几种方式都是等效的:

U('Blog/cate',array('cate_id'=>1,'status'=>1))
U('Blog/cate','cate_id=1&status=1')
U('Blog/cate?cate_id=1&status=1')

但是不允许使用下面的定义方式来传参数:

U('Blog/cate/cate_id/1/status/1')

根据项目的不同URL设置,同样的U方法调用可以智能地对应产生不同的URL地址效果,例如针对:

U('Blog/read?id=1')

这个定义为例。
如果当前URL设置为普通模式的话,最后生成的URL地址是:

http://serverName/index.php?m=Blog&a=read&id=1

如果当前URL设置为PATHINFO模式的话,同样的方法最后生成的URL地址是:

http://serverName/index.php/Blog/read/id/1

如果当前URL设置为REWRITE模式的话,同样的方法最后生成的URL地址是:

http://serverName/Blog/read/id/1

如果你同时还设置了PATHINFO分隔符的话:

'URL_PATHINFO_DEPR'=>'_'

就会生成

http://serverName/Blog_read_id_1

如果当前URL设置为REWRITE模式,并且设置了伪静态后缀为html的话,同样的方法最后生成的URL地址是:

http://serverName/Blog/read/id/1.html

如果设置了多个伪静态支持,那么会自动取第一个伪静态后缀添加到URL地址后面,当然你也可以手动在U方法里面指定要生成的伪静态后缀,例如:

U('Blog/read','id=1','xml')

就会生成

http://serverName/Blog/read/id/1.xml

路由支持
U方法还可以支持路由,如果我们定义了一个路由规则为:

'news/:id\d'=>'News/read'

那么可以使用

U('/news/1')

复制代码
最终生成的URL地址是:

http://serverName/index.php/news/1

域名支持
如果你的应用涉及到多个子域名的操作地址,那么也可以在U方法里面指定需要生成地址的域名,例如:

U('Blog/read@blog.thinkphp.cn','id=1');

@后面传入需要指定的域名即可。

此外,U方法的第5个参数如果设置为true,表示自动识别当前的域名,并且会自动根据子域名部署设置APP_SUB_DOMAIN_DEPLOYAPP_SUB_DOMAIN_RULES自动匹配生成当前地址的子域名。
如果开启了URL_CASE_INSENSITIVE,则会统一生成小写的URL地址。
锚点支持
3.1.2版本开始,U方法还可以支持生成URL地址中的锚点,例如:

U('Blog/read#comment','id=1','html')

就会生成

http://serverName/Blog/read/id/1.html#comment

如果域名和锚点同时使用的话,注意顺序为先锚点后域名,例如:

U('Blog/read#comment@blog','id=1');

ThinkPHP中的U方法详解:ThinkPHP官方教程

基于thinkphp的后台管理系统模板快速搭建 - 24k-小清新 - 博客园

mikel阅读(1283)

来源: 基于thinkphp的后台管理系统模板快速搭建 – 24k-小清新 – 博客园

当我们在搭建网站的时候,后端开发人员在编写后台的管理系统的时候,往往会因为缺少一个合适的后台管理系统的模板,而必须去重新编写一个,这几天由于工作上的安排,需要去研究一下thinkcmf的后台管理系统,于是发现那个模式是相当不错,感觉基本每个后台管理系统都可以套用,我把它的主题框架划分了4个大块,三级菜单栏、内容iframe、标签栏、顶栏,如下图:

是不是觉得挺可以的?是不是有种所有后台管理系统都可以套用的赶脚勒?由于整个后台过于庞大,但我们又只是要其这样的主体UI框架,其他的都不要,于是我把它重新复制粘贴了一下,把我们需要的这个UI的实现给提取出来了,

查看效果:http://www.live086.cn/Text/(空间2015/09/23会停用,所以可以下载面的源码,直接放在本地服务器(wampserver)就可以运行)

获取源码:http://pan.baidu.com/s/1gdEqUYJ  密码:c951

这个嘛,http://t.cn/RUbL4rP

这个UI比较特别的地方在,我们在选择三级菜单栏时,右侧的内容iframe会即时的更换,所选择的菜单项也会以标签的形式出现在标签栏上,可以随意切换,关闭,同时也可以点击刷新当前的内容iframe,整个操作起来舒服简单方便,其代码主要从几个方面来实现这些功能:

openapp(url, appid, appname, selectObj)

这是一个核心的函数,就是打开与菜单栏或是标签栏相对应的iframe,url是iframe的路径,thinkphp用U方法生成,appid是iframe的唯一标识,必传,在切换标签栏的时候和iframe隐藏与否有很重要的作用,否则会出现点击菜单栏没有效果的,具体可以下载源码去看,appname则是标签显示名称,selectObj是触发对象

$current_iframe[0].contentWindow.location.reload();

而刷新功能则是使用到iframe的属性contentWindow,相当于获得iframe的window对象,于是可以达到刷新的作用,对于框架之间互相调用函数和变量,可前往看这篇博客http://www.cnblogs.com/wuxiaobin/p/4812732.html

至于三级菜单怎么实现?关闭标签的实现?其他细节功能可以查看源码去看!

三种遍历树的方法 - 暮夏 - 博客园

mikel阅读(1114)

$dirs = array($from);

来源: 三种遍历树的方法 – 暮夏 – 博客园

树的概念在开发里面是很重要的一部分,xml的文档对象模型(DOM)就是一棵树,文件夹文件的结构也是一棵树。遍历树是开发中经常要遇到的一个问题,比如,要找出DOM里面的img 标签的个数,就要遍历一棵DOM树。要在一个目录里面查找是否有一个文件也要用到遍历这个目录。在这里我们以遍历文件为例,说明遍历树的三种基本的方法:
递归深度优先算法,非递归深度优先算法,非递归广度优先算法。
这些算法是我们在项目中经常重复的一些算法,我感觉我写程序以来,我做的大多数算法都用了大二学的那本数据结构,有些时候,只是改装一些一些算法,有些时候也只是把几种算法合并一下,也许这是为什么数据结构这本书这样重要的原因。
先看代码:

复制代码

<?php
define(‘DS’, DIRECTORY_SEPARATOR);
function rec_list_files($from = ‘.’)
{
if(!is_dir($from)) {
return array();
}
$files = array();
if($dh = opendir($from))
{
while(false !== ($file = readdir($dh))) {

if($file == ‘.’ || $file == ‘..’) {
continue;
}
$path = $from . DS . $file;

if (is_file($path)) {
$files[] = $path;
}
$files = array_merge($files, rec_list_files($path));
}
closedir($dh);
}
return $files;
}

function deep_first_list_files($from = ‘.’)
{
if(!is_dir($from)) {
return false;
}
$files = array();
$dirs = array($from);
while(NULL !== ($dir = array_pop($dirs))) {
if( $dh = opendir($dir)) {
while( false !== ($file = readdir($dh))) {
if($file == ‘.’ || $file == ‘..’) {
continue;
}
$path = $dir . DS . $file;
if(is_dir($path)) {
$dirs[] = $path;
} else {
$files[] = $path;
}
}
closedir($dh);
}
}
return $files;
}

function breadth_first_files($from = ‘.’) {
$queue = array(rtrim($from, DS).DS);// normalize all paths
$files = array();
while($base = array_shift($queue )) {
if (($handle = opendir($base))) {
while (($child = readdir($handle)) !== false) {
if( $child == ‘.’ || $child == ‘..’) {
continue;
}
if (is_dir($base.$child)) {
$combined_path = $base.$child.DS;
array_push($queue, $combined_path);
} else {
$files[] = $base.$child;
}
}
closedir($handle);
} // else unable to open directory => NEXT CHILD
}
return $files; // end of tree, file not found
}

function profile($func, $trydir)
{
$mem1 = memory_get_usage();
echo ‘<pre>———————– Test run for ‘.$func.'() ‘;
flush();
$time_start = microtime(true);
$list = $func($trydir);
//print_r($list);
$time = microtime(true) – $time_start;
echo ‘Finished : ‘.count($list).’ files</pre>’;
$mem2 = memory_get_peak_usage();
printf(‘<pre>Max memory for ‘.$func.'() : %0.2f kbytes Running time for ‘.$func.'() : %0.f s</pre>’,
($mem2-$mem1)/1024.0, $time);
return $list;
}
profile(‘rec_list_files’, “D:\www\server”);
profile(‘deep_first_list_files’, “D:\www\server”);
profile(‘breadth_first_files’, “D:\www\server”);
?>

复制代码

rec_list_files 是递归的深度优先的算法,这个是用一个简单的函数递归来实现,用array_merge 来合并数组
deep_first_list_files 是非递归的深度优先的算法,用了一个栈来实现。
breadth_first_files 是非递归的广度优先算法,用了一个队列来实现。
顺便说一句,php中的数组,可以做为hashtable,queue,stack,普通数组,甚至做树也是可以的。运行的结果:

-----------------------
Test run for rec_list_files() ...Finished : 1868 files
Max memory for rec_list_files() : 496.93 kbytes Running time for rec_list_files() : 9.231678 s
-----------------------
Test run for deep_first_list_files() ...Finished : 1868 files
Max memory for deep_first_list_files() : 432.41 kbytes Running time for deep_first_list_files() : 3.940216 s
-----------------------
Test run for breadth_first_files() ...Finished : 1868 files
Max memory for breadth_first_files() : 432.55 kbytes Running time for breadth_first_files() : 3.749125 s

第二种和第三种方法的效率和内存消耗差别不大,但是第一种递归调用消耗的内存和时间都要大很多,有时候为了效率,可能采用非递归的实现方式比较的好。

input输入框只能输入数字,只能输入字母数字组合 - 预见弥女巫 - SegmentFault 思否

mikel阅读(877)

来源: input输入框只能输入数字,只能输入字母数字组合 – 预见弥女巫 – SegmentFault 思否

输入大小写字母、数字、下划线:
<input type="text" onkeyup="this.value=this.value.replace(/[^\w_]/g,'');"> 

输入小写字母、数字、下划线:
<input type="text" onkeyup="this.value=this.value.replace(/[^a-z0-9_]/g,'');"> 

输入数字和点
<input type="text" onkeyup="value=value.replace(/[^\d.]/g,'')">

输入中文:   
<input type="text" onkeyup="this.value=this.value.replace(/[^\u4e00-\u9fa5]/g,'')">  
  
输入数字:   
<input type="text" onkeyup="this.value=this.value.replace(/\D/g,'')">  
  
输入英文:   
<input type="text" onkeyup="this.value=this.value.replace(/[^a-zA-Z]/g,'')">  
  
输入中文、数字、英文:   
<input onkeyup="value=value.replace(/[^\w\u4E00-\u9FA5]/g, '')">  
  
输入数字和字母:
<input onKeyUp="value=value.replace(/[\W]/g,'')">  

除了英文的标点符号以外,其他的都可以中文,英文字母,数字,中文标点
<input type="text" onkeyup="this.value=this.value.replace(/^[^!@#$%^&*()-=+]/g,'')">

只能输入数字代码(小数点也不能输入)
<input onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')">

只能输入数字,能输小数点.
<input onkeyup="if(isNaN(value))execCommand('undo')" onafterpaste="if(isNaN(value))execCommand('undo')">
<input name=txt1 onchange="if(/\D/.test(this.value)){alert('只能输入数字');this.value='';}">

数字和小数点方法二
<input type=text t_value="" o_value="" onkeypress="if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value" onkeyup="if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value" onblur="if(!this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?|\.\d*?)?$/))this.value=this.o_value;else{if(this.value.match(/^\.\d+$/))this.value=0+this.value;if(this.value.match(/^\.$/))this.value=0;this.o_value=this.value}">

只能输入字母和汉字
<input onkeyup="value=value.replace(/[\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[\d]/g,''))" maxlength=10 name="Numbers">

只能输入英文字母和数字,不能输入中文
<input onkeyup="value=value.replace(/[^\w\.\/]/ig,'')">

只能输入数字和英文
<input onKeyUp="value=value.replace(/[^\d|chun]/g,'')">

小数点后只能有最多两位(数字,中文都可输入),不能输入字母和运算符号:
<input onKeyPress="if((event.keyCode<48 || event.keyCode>57) && event.keyCode!=46 || /\.\d\d$/.test(value))event.returnValue=false">

小数点后只能有最多两位(数字,字母,中文都可输入),可以输入运算符号:
<input onkeyup="this.value=this.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')">

HTML5调用手机摄像拍照、相册等功能样式美化及demo - CSDN博客

mikel阅读(1244)

来源: HTML5调用手机摄像拍照、相册等功能样式美化及demo – CSDN博客

最近用MUI做了个移动端项目,设计中涉及到调用手机摄像头拍照等功能需求,然而在PLUS环境下才能直接调用,这就让人有点头疼了,后经查询资料学习了解到有一个很简单的方法就是input:file标签,不需要复杂代码操作就能实现调用拍照、相册等功能。

//capture -- 设置选择需要调用的功能
//camera -- 照相机
//camcorder -- 摄像机
//microphone -- 录音 
//accept -- 直接打开系统文件目录 

<input type="file" accept="image/*" capture="camera">
<input type="file" accept="video/*" capture="camcorder">
<input type="file" accept="audio/*" capture="microphone">

//input:file标签还有一个属性multiple 用来支持多选 直接呼出原生选项
<input type="file" accept="image/*" multiple>

input [ type=file ] 按钮美化及上传demo

简单说就是:先将原按钮透明度opacity设为0,再外层用标签包裹,最终实现美化功能。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title> <input[type=file]>上传demo </title>
    <style>
        .file {
            position: relative;
            display: inline-block;
            background: #D0EEFF;
            border: 1px solid #99D3F5;
            border-radius: 4px;
            padding: 4px 12px;
            overflow: hidden;
            color: #1E88C7;
            text-decoration: none;
            text-indent: 0;
            line-height: 20px;
        }
        .file input {
            position: absolute;
            font-size: 100px;
            right: 0;
            top: 0;
            opacity: 0;
        }
        .file:hover {
            background: #AADFFD;
            border-color: #78C3F3;
            color: #004974;
            text-decoration: none;
        }
        p.bottomTitlt{
            margin: 0;
            letter-spacing: 2px;
            padding:  0;
        }
    </style>
</head>
<body>

<a href="javaScript:;" class="file">
    <p class="bottomTitlt">身份证正面</p>
    <img src="" alt=""/>
    <input type="file"  placeholder="身份证正面"  >
</a>
<p class="showFileName"></p>



<script src="https://code.jquery.com/jquery-3.2.0.min.js"></script>

<script type="text/javascript">
    $(".file").on("change","input[type='file']",function(){
        var filePath=$(this).val();
        var fr= new FileReader();
        var imgObj = this.files[0];
        fr.readAsDataURL(imgObj);
        var obj = $(this).prev()[0];
        if(filePath.indexOf("jpg")!=-1 || filePath.indexOf("JPG")!=-1 || filePath.indexOf("PNG")!=-1 || filePath.indexOf("png")!=-1){
            var arr = filePath.split('\\');
            var fileName = arr[arr.length-1];
            $(this).parent().next().html(fileName);
            fr.onload=function( ){
                obj.src=this.result;
            };
        }else{
            $(this).parent().next().html("您未上传文件,或者您上传文件类型有误!").css("color","red");
            return false
        }
    });
</script>

</body>
</html>

input[type=file]样式美化后效果图:

按钮美化效果

图片上传后效果图:

上传文件效果

Golang 常用字符串处理方法汇总,Go语言代码片段分享, - 脚本分享网

mikel阅读(1090)

Golang 常用字符串处理方法汇总,下面的代码主要展示了golang中strings库的用法

来源: Golang 常用字符串处理方法汇总,Go语言代码片段分享, – 脚本分享网

package main

import (
"fmt"
"strings"
//"unicode/utf8"
)

func main() {
fmt.Println("查找子串是否在指定的字符串中")
fmt.Println(" Contains 函数的用法")
fmt.Println(strings.Contains("seafood", "foo")) //true
fmt.Println(strings.Contains("seafood", "bar")) //false
fmt.Println(strings.Contains("seafood", "")) //true
fmt.Println(strings.Contains("", "")) //true 这里要特别注意
fmt.Println(strings.Contains("我是中国人", "我")) //true

fmt.Println("")
fmt.Println(" ContainsAny 函数的用法")
fmt.Println(strings.ContainsAny("team", "i")) // false
fmt.Println(strings.ContainsAny("failure", "u &amp; i")) // true
fmt.Println(strings.ContainsAny("foo", "")) // false
fmt.Println(strings.ContainsAny("", "")) // false

fmt.Println("")
fmt.Println(" ContainsRune 函数的用法")
fmt.Println(strings.ContainsRune("我是中国", '我')) // true 注意第二个参数,用的是字符

fmt.Println("")
fmt.Println(" Count 函数的用法")
fmt.Println(strings.Count("cheese", "e")) // 3
fmt.Println(strings.Count("five", "")) // before &amp; after each rune result: 5 , 源码中有实现

fmt.Println("")
fmt.Println(" EqualFold 函数的用法")
fmt.Println(strings.EqualFold("Go", "go")) //大小写忽略

fmt.Println("")
fmt.Println(" Fields 函数的用法")
fmt.Println("Fields are: %q", strings.Fields(" foo bar baz ")) //["foo" "bar" "baz"] 返回一个列表

//相当于用函数做为参数,支持匿名函数
for _, record := range []string{" aaa*1892*122", "aaa\taa\t", "124|939|22"} {
fmt.Println(strings.FieldsFunc(record, func(ch rune) bool {
switch {
case ch &gt; '5':
return true
}
return false
}))
}

fmt.Println("")
fmt.Println(" HasPrefix 函数的用法")
fmt.Println(strings.HasPrefix("NLT_abc", "NLT")) //前缀是以NLT开头的

fmt.Println("")
fmt.Println(" HasSuffix 函数的用法")
fmt.Println(strings.HasSuffix("NLT_abc", "abc")) //后缀是以NLT开头的

fmt.Println("")
fmt.Println(" Index 函数的用法")
fmt.Println(strings.Index("NLT_abc", "abc")) // 返回第一个匹配字符的位置,这里是4
fmt.Println(strings.Index("NLT_abc", "aaa")) // 在存在返回 -1
fmt.Println(strings.Index("我是中国人", "中")) // 在存在返回 6

fmt.Println("")
fmt.Println(" IndexAny 函数的用法")
fmt.Println(strings.IndexAny("我是中国人", "中")) // 在存在返回 6
fmt.Println(strings.IndexAny("我是中国人", "和")) // 在存在返回 -1

fmt.Println("")
fmt.Println(" Index 函数的用法")
fmt.Println(strings.IndexRune("NLT_abc", 'b')) // 返回第一个匹配字符的位置,这里是4
fmt.Println(strings.IndexRune("NLT_abc", 's')) // 在存在返回 -1
fmt.Println(strings.IndexRune("我是中国人", '中')) // 在存在返回 6

fmt.Println("")
fmt.Println(" Join 函数的用法")
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", ")) // 返回字符串:foo, bar, baz

fmt.Println("")
fmt.Println(" LastIndex 函数的用法")
fmt.Println(strings.LastIndex("go gopher", "go")) // 3

fmt.Println("")
fmt.Println(" LastIndexAny 函数的用法")
fmt.Println(strings.LastIndexAny("go gopher", "go")) // 4
fmt.Println(strings.LastIndexAny("我是中国人", "中")) // 6

fmt.Println("")
fmt.Println(" Map 函数的用法")
rot13 := func(r rune) rune {
switch {
case r &gt;= 'A' &amp;&amp; r &lt;= 'Z': return 'A' + (r-'A'+13)%26 case r &gt;= 'a' &amp;&amp; r &lt;= 'z':
return 'a' + (r-'a'+13)%26
}
return r
}
fmt.Println(strings.Map(rot13, "'Twas brillig and the slithy gopher..."))

fmt.Println("")
fmt.Println(" Repeat 函数的用法")
fmt.Println("ba" + strings.Repeat("na", 2)) //banana

fmt.Println("")
fmt.Println(" Replace 函数的用法")
fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2))
fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1))

fmt.Println("")
fmt.Println(" Split 函数的用法")
fmt.Printf("%q\n", strings.Split("a,b,c", ","))
fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a "))
fmt.Printf("%q\n", strings.Split(" xyz ", ""))
fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins"))

fmt.Println("")
fmt.Println(" SplitAfter 函数的用法")
fmt.Printf("%q\n", strings.SplitAfter("/home/m_ta/src", "/")) //["/" "home/" "m_ta/" "src"]

fmt.Println("")
fmt.Println(" SplitAfterN 函数的用法")
fmt.Printf("%q\n", strings.SplitAfterN("/home/m_ta/src", "/", 2)) //["/" "home/m_ta/src"]
fmt.Printf("%q\n", strings.SplitAfterN("#home#m_ta#src", "#", -1)) //["/" "home/" "m_ta/" "src"]

fmt.Println("")
fmt.Println(" SplitN 函数的用法")
fmt.Printf("%q\n", strings.SplitN("/home/m_ta/src", "/", 1))

fmt.Printf("%q\n", strings.SplitN("/home/m_ta/src", "/", 2)) //["/" "home/" "m_ta/" "src"]
fmt.Printf("%q\n", strings.SplitN("/home/m_ta/src", "/", -1)) //["" "home" "m_ta" "src"]
fmt.Printf("%q\n", strings.SplitN("home,m_ta,src", ",", 2)) //["/" "home/" "m_ta/" "src"]

fmt.Printf("%q\n", strings.SplitN("#home#m_ta#src", "#", -1)) //["/" "home/" "m_ta/" "src"]

fmt.Println("")
fmt.Println(" Title 函数的用法") //这个函数,还真不知道有什么用
fmt.Println(strings.Title("her royal highness"))

fmt.Println("")
fmt.Println(" ToLower 函数的用法")
fmt.Println(strings.ToLower("Gopher")) //gopher

fmt.Println("")
fmt.Println(" ToLowerSpecial 函数的用法")

fmt.Println("")
fmt.Println(" ToTitle 函数的用法")
fmt.Println(strings.ToTitle("loud noises"))
fmt.Println(strings.ToTitle("loud 中国"))

fmt.Println("")
fmt.Println(" Replace 函数的用法")
fmt.Println(strings.Replace("ABAACEDF", "A", "a", 2)) // aBaACEDF
//第四个参数小于0,表示所有的都替换, 可以看下golang的文档
fmt.Println(strings.Replace("ABAACEDF", "A", "a", -1)) // aBaaCEDF

fmt.Println("")
fmt.Println(" ToUpper 函数的用法")
fmt.Println(strings.ToUpper("Gopher")) //GOPHER

fmt.Println("")
fmt.Println(" Trim 函数的用法")
fmt.Printf("[%q]", strings.Trim(" !!! Achtung !!! ", "! ")) // ["Achtung"]

fmt.Println("")
fmt.Println(" TrimLeft 函数的用法")
fmt.Printf("[%q]", strings.TrimLeft(" !!! Achtung !!! ", "! ")) // ["Achtung !!! "]

fmt.Println("")
fmt.Println(" TrimSpace 函数的用法")
fmt.Println(strings.TrimSpace(" \t\n a lone gopher \n\t\r\n")) // a lone gopher

}

//该代码片段来自于: http://www.sharejs.com/codes/go/7304