雅荷心语博客
雅荷心语
心之所向便是光
  • 首页
  • 前端之旅
  • 后端之路
  • 软件工具
  • 心灵鸡汤
  • 心路历程
  • 视频资料
  • 关于我们
    • 关于我
    • 关于我
  • 微信平台
    • 业务合作
  • 首页
  • 前端之旅
  • 后端之路
  • 软件工具
  • 心灵鸡汤
  • 心路历程
  • 视频资料
  • 关于我们
    • 关于我
    • 关于我
  • 微信平台
    • 业务合作
  • 关注本站
    • 微信
    • 微博
    • 腾讯微博
    • Twitter
    • Facebook
    • RSS订阅
Hi, 请登录     我要注册     找回密码
分享到:

前端之旅 第15页

去分类设置中添加分类描述吧

vcard – 二维码名片的格式及扫码导入

2016-05-05admin阅读(2949)评论(2)

本文转载来自: http://blog.csdn.net/johnsuna/article/details/8482454

如果你希望生成的二维码名片可以被智能设备识别,并可以直接导入到通讯录中,那么就应遵循某种标准格式。常见的是生成vcard标准格式。一个简单的vcard名片格式例子参考如下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
BEGIN:VCARD
VERSION:3.0
FN:任侠
TEL;CELL;VOICE:15201280000
TEL;WORK;VOICE:010-62100000
TEL;WORK;FAX:010-62100001
EMAIL;PREF;INTERNET:lzw#lzw.me
URL:http://lzw.me
orG:志文工作室
ROLE:产品部
TITLE:CTO
ADR;WORK;POSTAL:北京市朝阳区北四环中路35号;100101
REV:2012-12-27T08:30:02Z
END:VCARD

如果你想更详细的定制所需要的格式,则需要详细的了解vcard的格式标准。

3.1 vcard格式简介

vCard(或称做Versitcard)最早是由Versit联盟于1995年提出的,当时联盟成员包括苹果公司,AT&T科技(后来的朗讯),IBM及西门子。在1996年十二月,格式的拥有权移至因特网邮件联盟(IMC),此联盟是由一些关注因特网电子邮件的公司所组成。

vCard标准的2.1版被电子邮件客户端广泛支持。3.0版是一个包含在RFC 2425和RFC 2426中的IETF标准跟踪提案。vCard的常用文件扩展名是.vcf。

不同的程序对vCard标准实现亦不同。Mac OS X中的Address Book允许把所有联系人导出到一个vcf文件,而Microsoft Outlook只能每人一个文件。Linux中KDE的Kontact允许每个文件导入或导出一人或多人。

3.2 vcard标准通信薄基本格式

3.2.1 VCard 数据格式的标识符 – VCARD

预定义的值类型:uri, date, date-time, float
新增加的值类型:binary, phone-number, utc-offset and vcard value
预定义的类型:SOURCE, NAME, PROFILE, BEGIN, END.
新增加的类型:FN, N, NICKNAME, PHOTO, BDAY, ADR, LABEL, TEL, EMAIL,
MAILER, TZ, GEO, TITLE, ROLE, LOGO, AGENT, orG, CATEGORIES, NOTE,
PRODID, REV, SORT-STRING, SOUND, URL, UID, VERSION, CLASS, KEY
预定义的参数:ENCODING, VALUE, CHARSET, LANGUAGE, CONTEXT.
新增加的参数:TYPE

3.2.2 vCard数据格式行: 类型 [;参数]:值

ADR;HOME;POSTAL;PARCEL:;;街道地址;深圳;广东;433330;中国
ADR:是一个类型,表示是一条地址信息
“;”号是分隔符合
HOME;POSTAL;PARCEL表示参数,表示ADR的用途或者是类别
:;;街道地址;深圳;广东;433330;中国 表示是一个ADR值,地址值

3.2.3 预定义类型的用法

3.2.3.1 BEGIN 和 END 类型

Vcard内容必须以BEGIN:VCARD开头,以END:VCARD结尾vcard的类型标志特征详解

3.2.3.2 标识类型

FN 类型定义

目的:vcard对象的名称,一个vcard对象必须包含FN类型。
例子:FN:Mr. John Q. Public\, Esq.

N类型定义

目的:FN表示一个vcard对象的名称,N表示这个对象名称的组成部分
例子:N:Public;John;Quinlan;Mr.;Esq.
N:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.
各个组成部分可以用分号分号,每个组成部分可以用逗号。

NICKNAME类型定义

目的:表示别名
例子:NICKNAME:Robbie
NICKNAME:Jim,Jimmie

PHOTO类型定义

目的:vcard对象的图像信息
例子:PHOTO;VALUE=uri:图片地址

PHOTO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN
AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
<…remainder of “B” encoded binary data…>

如果使用内联的二进制数据表示图片信息,那么;ENCODING=b

BDAY类型定义

目的:表示出生日期
例子:BDAY:1996-04-15
BDAY:1953-10-15T23:10:00Z
BDAY:1987-09-27T08:30:00-06:00

3.2.3.3 联系方式

ADR 类型定义

目的:是一个组合,用来表示一个地址信息,值类型是一个用分号分开的文本值
例子:ADR;TYPE=dom,home,postal,parcel:;;123 Main Street;Any Town;CA;91921-1234;A
ADR;HOME;POSTAL;PARCEL:;;街道地址;深圳;广东;444444;中国
组合由一下部分顺序的组成:

  the post office box;
the extended address;
the street address;
the locality (e.g., city);
the region (e.g., state or province);
the postal code;
the country name

七个部分组成,如果,其他的一个部分没有,必须用分号分开

type 参数的说明
“dom” 国内地址
“intl” 国际地址
“parcel”包裹递送地址
“home” 居住地址;
“work”工作地址;
“pref” 有多个地址的时候,优先的地址
缺省的”TYPE=intl,postal,parcel,work”,可以替换

LABEL类型定义

目的:是一格式化的文本值,表示一个地址
例子:LABEL;TYPE=dom,home,postal,parcel:Mr.John Q. Public\, Esq.\n
Mail Drop: TNE QB\n123 Main Street\nAny Town\, CA 91921-1234
\nU.S.A.

type 参数的说明
“dom” 国内地址
“intl” 国际地址
“parcel”包裹递送地址
“home” 居住地址;
“work”工作地址;
“pref” 有多个地址的时候,优先的地址
缺省的”TYPE=intl,postal,parcel,work”,可以替换

和ADR的不同是 ADR的值是用分号分开的数据,LABEL就是一个格式化的文本。
电话通信地址类型

TEL类型定义

目的:指定一个电话号码
例子:TEL;TYPE=work,voice,pref,msg:+1-213-555-1234
说明:值是一个规范的全球唯一的电话号码
TYPE参数的值有:

  ”home”表示家庭电话
“msg” 表示这个号码支持语音
“work” 工作电话
“pref” 表示多个电话中最喜欢使用的电话
“voice” 声音电话号码
“fax”传真号码
“cell” 表示手机电话
“video” 视频电话
“pager” 调度电话,估计是总机的电话
“bbs” 公开的广播系统的电话
“modem” 调制解调器电话
“car”汽车电话
“isdn” ISDN连接电话号码
“pcs” 个人通信服务电话

缺省是 “voice”.
TYPE参数的用法是TYPE=work;TYPE=voice或者”TYPE=work,voice”,缺省值可以被重置
“TYPE=work,home,voice,fax”.

EMAIL类型定义

目的:指定一个电子邮件
例子:EMAIL;TYPE=internet:邮箱地址
EMAIL;TYPE=x400:邮箱地址
EMAIL;TYPE=internet,pref:邮箱地址
TYPE参数的使用

“internet” 表示一个internet 类型地址
“x400” 表示是一个 X.400 地址
“pref”最喜欢使用的邮件电子

缺省是”internet”.

MAILER 类型定义

目的:指定一个电子邮件发送者
例子:MAILER:PigeonMail 2.1

3.2.3.4 地理类型

TZ类型定义

目的:时区信息
例子:TZ:-05:00
TZ;VALUE=text:-05:00; EST; Raleigh/North America
缺省是一个utc-offset值.
GEO类型定义

目的:地理位置信息
例子GEO:37.386013;-122.082932
CEO 经度;纬度

3.2.3.5 组织类型

TITLE类型定义

目的:工作位置,工作职能(job title)
例子TITLE:Director\, Research and Development

ROLE 类型定义

目的:公司的职业(occupation)
例子ROLE:Programmer
LOGO类型定义

目的:公司logo,是一个图像信息
例子LOGO;VALUE=uri:图片地址

LOGO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm
ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
<…the remainder of “B” encoded binary data…>

说明:TYPE知道图像的格式,ENCODING=b表示是二进制的数据流
URI表示是一个外部图像对象

AGENT类型定义

目的:指定另外一个人替换他的个人行为
例子:AGENT;VALUE=uri: CID:JQPUBLIC.part3.960129T083020.邮箱地址
AGENT:BEGIN:VCARD\nFN:Susan Thomas\nTEL:+1-919-555-
1234\nEMAIL\;INTERNET:主机地址\nEND:VCARD\n
说明:缺省是一个Vcard对象,当时也可是一个URI指定的外部Vcard对象

ORG类型定义

目的:表示一个组织的名称
例子ORG:ABC\, Inc.;North American Division;Marketing

3.2.3.6 解释类型

CATEGORIES类型定义
目的:vcard应用的分类信息
例子:CATEGORIES:TRAVEL AGENT
CATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY
NOTE 类型定义

目的:对vcard的注释和说明
例子:NOTE:This fax number is operational 0800 to 1715
EST\, Mon-Fri.

PRODID类型定义

目的:指定创建Vcard对象的产品的ID
例子:PRODID:-//ONLINE DIRECTORY//NONSGML Version 1//EN
REV类型定义

目的:指定当前Vcard的修改信息
例子:REV:1995-10-31T22:27:10Z
REV:1997-11-15
SORT-STRING类型定义

目的:指定家庭名称或者其他名称对FN和N类型排序
例子:

        FN:Rene van der Harten
N:van der Harten;Rene;J.;Sir;R.D.O.N.
SORT-STRING:Harten
FN:Robert Pau Shou Chang
N:Pau;Shou Chang;Robert
SORT-STRING:Pau
FN:Osamu Koura
N:Koura;Osamu
SORT-STRING:Koura
FN:Oscar del Pozo
N:del Pozo Triscon;Oscar
SORT-STRING:Pozo
FN:Chistine d’Aboville
N:d’Aboville;Christine
SORT-STRING:Aboville

SOUND类型定义

目的:指定Vcard的数字声音信息,缺省是指定vcard的name类型的发音信息。
例子: SOUND;TYPE=BASIC;VALUE=uri:CID:JOHNQPUBLIC.part8.
19960229T080000.地址
SOUND;TYPE=BASIC;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0 <…the remainder of “B” encoded binary data…>

可以用URI指定一个外部声音二进制流
可以是内置的声音二进制流,ENCODING=b
UID类型定义

目的:指定一个全球唯一的个人或资源标识。
例子:UID:19950401-080045-40000F192713-0052
URL类型定义
目的:指定Vcard 参考的路径。
例子:URL: 网址

VERSION类型定义

目的:指定Vcard使用的vcard规范的版本。
例子: VERSION:3.0

3.2.3.7 Security 类型

CLASS类型定义

目的:指定访问Vcard对象的访问分级。
例子: CLASS:PUBLIC
CLASS:PRIVATE
CLASS:CONFIDENTIAL
说明:安全分级需要参考目录服务的访问分级

KEY 类型定义

目的:指定Vcard的公共钥匙值(加密解密是使用)或者是授权认证。
例子:

KEY;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQA
wdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENbW11bmljYX
Rpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
ZW1zMRwwGgYDVQQDExNyb290Y2EubmV0c2NhcGUuY29tMB4XDTk3MDYwNj
E5NDc1OVoXDTk3MTIwMzE5NDc1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYD
VQQKEx1OZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLjEYMBYGA1UEAx
MPVGltb3RoeSBBIEhvd2VzMSEwHwYJKoZIhvcNAQkBFhJob3dlc0BuZXRz
Y2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3dlczBcMA0GCSqGSIb3DQ
EBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyrdN2
dXcoX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MB
EGCWCGSAGG+EIBAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau
+hUMbsQukjANBgkqhkiG9w0BAQQFAAOBgQBexv7o7mi3PLXadkmNP9LcIP
mx93HGp0Kgyx1jIVMyNgsemeAwBM+MSlhMfcpbTrONwNjZYW8vJDSoi//y
rZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8VUMk1U7jt8LYpo4YULU7
UZHPYVUaSgVttImOHZIKi4hlPXBOhcUQ==

3.2.3.8 扩展类型

可以定义自己的类型,自己定义的类型需要以“x-”开头
比如例子中的信息:

  X-QQ:000000
X-ICQ:icq
X-WAB-GENDER:2

5

使用jQuery清空file文件域的解决方案

2016-03-01admin阅读(1628)评论(0)

今天有时间,试了网上的好几个,只有这个目前是可用的,代码如下:
72417af790529822459056f5d0ca7bcb0b46d4c3
emj

XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<input type="file" id="file">
<input type="button" class="btn" value="清掉">
</body>
<script type="text/javascript">
jQuery(document).ready(function($) {
$('.btn').click(function() {
var file = $("#file")
file.after(file.clone().val(""));
file.remove();
});
});
</script>
</html>

微信支付的最后一亩田(Js篇)

2016-01-21admin阅读(1439)

我们来聊聊微信支付的状态及回调
几种状态:
其中: res.err_msg 表示位置支付的状态:

第一: 用户支付%E

关于 php://input 输入流

2016-01-16admin阅读(1394)评论(0)

00:00/00:00

今天做微信消息转发到接口的时候,一直收不到POST过来的数据,后来想到用 php://input 来试试,于是就收到了 微信接口转发过来的xml数据!

我们看看介绍 php://input

$_POST 与 php教程://input可以取到值,$HTTP_RAW_POST_DATA 为空
$_POST 以关联数组方式组织提交的数据,并对此进行编码处理,如urldecode,甚至编码转换
php://input 也可以实现此这个功能可以获得POST的原始数据。
php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype=”multipart/form-data”。

测试代码:

1
2
3
4
5
6
7
public function index(){
if (IS_POST) {
$raw_post_data = file_get_contents('php://input', 'r');
Setlog('wished.json',$raw_post_data);
$result = $this->SendMail('iyahe@qq.com','来数据了.',$raw_post_data,'天明','微韵微信平台');
}
}

其中的 SendMail 方法是调用邮件提醒[/害羞]~~
Setlog 是设置日志,
我们看看收到的数据…
QQ20160116011942

关于Mysql 数据库存储emjoy表情报错以及PHP的处理方式

2016-01-11admin阅读(2334)评论(1)

标题有点长,总之就是关于emjoy表情

首先,emjoy表情我们并不陌生了,现在移动设备上到处都是这种表情,尤其是对我们做微信公众号服务的人来说,经常遇到因为用户微信昵称里面含有emjoy表情而导致用户数据存储失败以及数据库报错等等,找到了一些答案:
问题分析总结:
㈠ 原因
普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集,这必须要作为移动互联网行业的一个技术选型的要点
㈡ 限制
需要 >= MySQL 5.5.3版本、从库也必须是5.5的了、低版本不支持这个字符集、复制报错。
来自:http://blog.itpub.net/26230597/viewspace-1243233/
这次我们主要说说怎么显示,下面是我做出来的效果:
phpjoin
找到一个专门处理emjoy表情的类,地址如下:http://code.iamcal.com/php/emoji/
下面是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
include 'emoji.php';
$emj = '☀&#x1f331; &#x1f34c;&#x1f487; &#x1f43a; &#x1f602;&#x1f62a;&#x1f63e;&#x1f3e5; &#x1f3f0;&#x1f463;&#x1f498;&#x1f510;';
echo json_encode($emj).'<br/>';
$clean_text = emoji_docomo_to_unified($emj);
var_dump($clean_text);
$html = emoji_unified_to_html($clean_text);
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="emoji.css">
</head>
<body>
<?php echo $html;  ?>
</body>
</html>

很简单的处理,就显示在网页上啦,当然我们需要存数据库,直接json转码就是了…拿出来时候再转回来…
分享一个emjoy表情包地址 : http://www.oicqzone.com/tool/emoji/
本次代码地址:http://git.oschina.net/shala/SomeCode/tree/master/2016/1/emoji/

一个常用的扩展性极高的表单验证插件

2015-12-29小天明阅读(2141)评论(0)

前言:

规则说明:
如:input type=”email” value=”” name=”title” class=”fn-tinput” required data-rule-email=”true” data-msg-required=”请输入email地址” data-msg-email=”请输入正确的 email地址”
required //必填
data-rule-email=”true” //正则为 email
data-msg-required=”请输入您的电子邮箱” //为空时的提示信息
data-msg-email=”邮箱格式不正确” //不符合正则的提示
placeholder=”电子邮件” //input中没有填写的提示
表单验证是作为一个WEB页面必不可缺的东西,之前收集过一些表单验证插件,不过后来因为博客各种改版,都弄丢了了,今天重新开始收集!

XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>验证插件</title>
<style>
body,a{ font-size:14px; color:#666;}
ul,li{ margin:0; padding:0; list-style:none}
.fn-vhid{ visibility:hidden;}
.fn-tinput{ width:240px; height:30px; line-height:30px\9; border:#ddd solid 1px; background-color:transparent; padding:0 6px;}
textarea {border:#ddd solid 1px; background-color:transparent; width:60%}
.fn-tinput:focus,textarea:focus{ border-color:#c00;}
.bl-form label{ float:left; width:100px; text-align:right; padding-top:6px;}
.bl-form .controls label{ width:auto;}
.bl-form li{ margin-top:20px; overflow:hidden;}
em{ color:#C00;}
span.error{color:#C00; padding:0 6px;}
</style>
</head>
 
<body style="padding: 50px;">
<div class="demobox" style="width: 800px; background: #fff; border: #ddd solid 1px; padding: 30px;">
    <div class="bl-notes bl-notes-info">
        <h3>规则说明:</h3>
        <p>如:input type="email" value="" name="title" class="fn-tinput" required data-rule-<em>email</em>="true" data-msg-required="请输入email地址" data-msg-<em>email</em>="请输入正确的email地址"</p>
        <div class="fn-hr fn-mt10 fn-mb10"></div>
        <p>required //必填</p>
        <p>data-rule-<em>email</em>="true" //正则为 email </p>
        <p>data-msg-required="请输入您的电子邮箱" //为空时的提示信息</p>
        <p>data-msg-<em>email</em>="邮箱格式不正确" //不符合正则的提示</p>
        <p>placeholder="电子邮件"   //input中没有填写的提示</p>
        <strong>更多信息请参考源代码</strong>
    </div>
<form action="js/test.json" method="post" class="bl-form bl-formhor" id="jsForm">
        <ul>
         <li class="bl-form-group">
                <label><em>*</em>必填:</label>
                <div class="controls">
                   <input id="pwdid" class="fn-tinput" data-rule-remote="http://www.baidu.com" type="password" name="OldPassword" placeholder="原始密码" required data-msg-required="请输入原始密码" minlength="6" data-msg-minlength="至少输入6个字符" />
                </div>
            </li>
        
            <li class="bl-form-group">
                <label><em>*</em>必填:</label>
                <div class="controls">
                    <input type="text" value="" name="0" class="fn-tinput" placeholder="大于0" required data-msg-required="不能为空" data-rule-gt="true" data-gt="0"/>
                </div>
            </li>
            <li class="bl-form-group">
                <label><em>*</em>必填:</label>
                <div class="controls">
                    <input type="text" value="" name="1" class="fn-tinput" placeholder="必填" required data-msg-required="不能为空"/>
                </div>
            </li>
            <li class="bl-form-group">
                <label><em>*</em>Email:</label>
                <div class="controls">
                    <input type="email" value="" name="2" class="fn-tinput" placeholder="请输入email地址" required data-rule-email="true" data-msg-required="请输入email地址" data-msg-email="请输入正确的email地址" />
                </div>
            </li>
            <li class="bl-form-group">
                <label>手机:</label>
                <div class="controls">
                    <input type="text" value="" name="3" class="fn-tinput" placeholder="手机号" required data-rule-mobile="true" data-msg-required="请输入手机号" data-msg-mobile="请输入正确格式" />
                </div>
            </li>
            <li class="bl-form-group">
                <label>邮箱或手机:</label>
                <div class="controls">
                    <input type="text" value="" name="4" class="fn-tinput" placeholder="邮箱或手机" required data-rule-mm="true" data-msg-required="请输入邮箱" data-msg-mm="请输入正确格式" />
                </div>
            </li>
            <li class="bl-form-group">
                <label>数字6-20位:</label>
                <div class="controls">
                    <input type="text" value="" name="5" class="fn-tinput" placeholder="数字6-20位" required data-rule-number="true" data-msg-required="不能为空" data-msg-number="请输入正确的数字" data-msg-minlength="请输入最小6位" minlength="6" maxlength="20"/>
                </div>
            </li>
            <li class="bl-form-group">
                <label>年龄:</label>
                <div class="controls">
                    <input type="text" value="" name="6" class="fn-tinput" placeholder="年龄" required data-rule-age="true" data-msg-required="不能为空" data-msg-age="请输入数字" />
                </div>
            </li>
            <li class="bl-form-group">
                <label>新密码:</label>
                <div class="controls">
                    <input class="fn-tinput" type="password" name="password" value="" placeholder="新密码" required id="password" data-rule-remote="php.php">
                </div>
            </li>
            <li class="bl-form-group">
                <label>确认新密码:</label>
                <div class="controls">
                    <input class="fn-tinput" type="password"  name="confirm_password" value="" placeholder="确认新密码" required equalTo="#password">
                </div>
            </li>
            <li class="bl-form-group bl-form-text">
                <label>单选:</label>
                <div class="controls">
                    <label><input name="radio1" type="radio" value="" required>置顶</label>
                    <label><input name="radio1" type="radio" value="">推荐</label>
                    <span for="radio1" class="error"></span>
                </div>
            </li>
            <li class="bl-form-group bl-form-text">
                <label>多选:</label>
                <div class="controls">
                    <label><input name="checkbox1" type="checkbox" value="" required>黑色</label>
                    <label><input name="checkbox1" type="checkbox" value="">白色</label>
                    <span for="checkbox1" class="error"></span>
                </div>
            </li>
            <li class="bl-form-group">
                <label>下拉菜单:</label>
                <div class="controls">
                    <select name="select1" required>
                     <option value="">----选择菜单----</option>
                        <option value="1">菜单1</option>
                        <option value="2">菜单2</option>
                        <option value="3">菜单3</option>
                        <option value="4">菜单4</option>
                    </select>
                </div>
            </li>
            <li class="bl-form-group">
                <label>文本域:</label>
                <div class="controls editor">
                    <textarea name="textarea1" cols="" rows="" required></textarea>
                </div>
            </li>
            <li class="bl-form-group bl-form-btns">
                <label class="fn-vhid">提交:</label>
                <div class="controls">
                    <button class="fn-btn btn-primary btn-submit submitBtn" type="submit">提交按钮</button>
             <button type="reset" class="fn-btn">重置</button>
                </div>
            </li>
        </ul>
    </form>
</div>
<script src="http://lib.sinaapp.com/js/jquery/1.10.2/jquery-1.10.2.min.js"></script>
<script src="jquery.validate.js"></script>
<script>
$(function(){
    //jquery.validate
$("#jsForm").validate({
submitHandler: function() {
//验证通过后 的js代码写在这里
}
})
})
//下面是一些常用的验证规则扩展
//配置错误提示的节点,默认为label,这里配置成 span (errorElement:'span')
$.validator.setDefaults({
errorElement:'span'
});
//配置通用的默认提示语
$.extend($.validator.messages, {
required: '必填',
    equalTo: "请再次输入相同的值"
});
//邮箱
jQuery.validator.addMethod("mail", function (value, element) {
var mail = /^[a-z0-9._%-]+@([a-z0-9-]+\.)+[a-z]{2,4}$/;
return this.optional(element) || (mail.test(value));
}, "邮箱格式不对");
 
//电话验证规则
jQuery.validator.addMethod("phone", function (value, element) {
    var phone = /^0\d{2,3}-\d{7,8}$/;
    return this.optional(element) || (phone.test(value));
}, "电话格式如:0371-68787027");
 
//区号验证规则  
jQuery.validator.addMethod("ac", function (value, element) {
    var ac = /^0\d{2,3}$/;
    return this.optional(element) || (ac.test(value));
}, "区号如:010或0371");
 
//无区号电话验证规则  
jQuery.validator.addMethod("noactel", function (value, element) {
    var noactel = /^\d{7,8}$/;
    return this.optional(element) || (noactel.test(value));
}, "电话格式如:68787027");
 
//手机验证规则  
jQuery.validator.addMethod("mobile", function (value, element) {
    var mobile = /^1[3|4|5|7|8]\d{9}$/;
return this.optional(element) || (mobile.test(value));
}, "手机格式不对");
 
//邮箱或手机验证规则  
jQuery.validator.addMethod("mm", function (value, element) {
    var mm = /^[a-z0-9._%-]+@([a-z0-9-]+\.)+[a-z]{2,4}$|^1[3|4|5|7|8]\d{9}$/;
return this.optional(element) || (mm.test(value));
}, "格式不对");
 
//电话或手机验证规则  
jQuery.validator.addMethod("tm", function (value, element) {
    var tm=/(^1[3|4|5|7|8]\d{9}$)|(^\d{3,4}-\d{7,8}$)|(^\d{7,8}$)|(^\d{3,4}-\d{7,8}-\d{1,4}$)|(^\d{7,8}-\d{1,4}$)/;
    return this.optional(element) || (tm.test(value));
}, "格式不对");
 
//年龄
jQuery.validator.addMethod("age", function(value, element) {  
var age = /^(?:[1-9][0-9]?|1[01][0-9]|120)$/;
return this.optional(element) || (age.test(value));
}, "不能超过120岁");
///// 20-60   /^([2-5]\d)|60$/
 
//传真
jQuery.validator.addMethod("fax",function(value,element){
    var fax = /^(\d{3,4})?[-]?\d{7,8}$/;
    return this.optional(element) || (fax.test(value));
},"传真格式如:0371-68787027");
 
//验证当前值和目标val的值相等 相等返回为 false
jQuery.validator.addMethod("equalTo2",function(value, element){
    var returnVal = true;
    var id = $(element).attr("data-rule-equalto2");
    var targetVal = $(id).val();
    if(value === targetVal){
        returnVal = false;
    }
    return returnVal;
},"不能和原始密码相同");
 
//大于指定数
jQuery.validator.addMethod("gt",function(value, element){
    var returnVal = false;
    var gt = $(element).data("gt");
    if(value > gt && value != ""){
        returnVal = true;
    }
    return returnVal;
},"不能小于0 或空");
 
//汉字
jQuery.validator.addMethod("chinese", function (value, element) {
    var chinese = /^[\u4E00-\u9FFF]+$/;
    return this.optional(element) || (chinese.test(value));
}, "格式不对");
 
//指定数字的整数倍
jQuery.validator.addMethod("times", function (value, element) {
    var returnVal = true;
    var base=$(element).attr('data-rule-times');
    if(value%base!=0){
        returnVal=false;
    }
    return returnVal;
}, "必须是发布赏金的整数倍");
 
//身份证
jQuery.validator.addMethod("idCard", function (value, element) {
    var isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;//(15位)
    var isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;//(18位)
 
    return this.optional(element) || (isIDCard1.test(value)) || (isIDCard2.test(value));
}, "格式不对");
</script>
</body>
</html>

下面是预览效果:

xiaog

对微信支付的初步探索(一)

2015-12-28小天明阅读(1794)评论(0)

前言

之前有机会做微信支付的时候,我刚好辞职啦,这一次,有机会做了,今天花点时间来研究一下,不过到最后,需要微信审核一些东西,所以今天也做不成了,整理一下思路,等待微信审核吧,然后再继续研究…
20151228173039

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*微信支付*/
public function actionWecahtPay($url){
$wecaht = new Wechats($this->actionConfig());
$timestamp = time();//时间戳
$nonceStr = $wecaht->generateNonceStr($length=16); //随机字符串
$package = $this->actionUnifiedorder($nonceStr);//统一下单接口
$signType = 'MD5';
$jsTicket = $wecaht->getJsTicket($this->actionConfig()['appid']);
$string = "jsapi_ticket=$jsTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
$signature = sha1($string);
$signPackage = array(
"appId"     => $this->actionConfig()['appid'],
"nonceStr"  => $nonceStr,
"timestamp" => $timestamp,
'package'=>$package,
"url"       => $url,
"signature" => $signature,
);
return $signPackage;
}
/*微信支付统一下单接口*/
public function actionUnifiedorder($nonceStr=''){
$TempArr = array(
'appid'=>$this->actionConfig()['appid'],
'mch_id'=>'',//商户ID
'device_info'=>'WEB',//终端设备号
'nonce_str'=>$nonceStr,//随机字符串
'body'=>'',//商品或支付单简要描述
'detail'=>'',//商品详情
'attach'=>'',//附加数据
'out_trade_no'=>'',//商户订单号
'fee_type'=>'',//货币类型
'total_fee'=>'',//订单总金额,单位为分
'spbill_create_ip'=>'',//APP和网页支付提交用户端ip
'time_start'=>'',//交易起始时间,格式为yyyyMMddHHmmss
'time_expire'=>'',
'goods_tag'=>'',//商品标记,代金券或立减优惠功能的参数
'notify_url'=>'',//接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
'trade_type'=>'',//交易类型,取值如下:JSAPI,NATIVE,APP,
'product_id'=>'',//商品ID,trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。
'limit_pay'=>'',//no_credit--指定不能使用信用卡支付
'openid'=>'',//用户标识,用户的openid
);
ksort($TempArr);
$TempSign = $this->actionToUrlParams($TempArr);
$TempSign = sha1($TempSign);
$TempArr['sign'] = $TempSign;
$Result = https_request('https://api.mch.weixin.qq.com/pay/unifiedorder',$TempArr);
}
/*拼接字符串*/
public function actionToUrlParams($urlObj)
{
$buff = "";
foreach ($urlObj as $k => $v)
{
if($k != "sign"){
$buff .= $k . "=" . $v . "&";
}
}
$buff = trim($buff, "&");
return $buff;
}

Git初见

2015-12-17小天明阅读(1701)评论(0)

什么是Git

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git的读音为/gɪt/。
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git1.9版本下载!
http://yunpan.cn/cjjBjP69ND7dD 访问密码 aacc
本次使用的是git.oschina.net 提供的仓库….
还是录个视频吧~~

即将遇到的三个命令

git clone 项目地址 //克隆文件到本地
git push //提交文件
git pull //更新文件

视频没有录到声音….好遗憾,而且传优酷不高清,已经传网盘…视频密码ming

网盘下载地址:http://yunpan.cn/c3pM7pV4bhaPB 访问密码 fc68

对Ajax数据处理的初步探索

2015-12-14admin阅读(1953)评论(0)

今天在教@小房子学异步处理;记录一下内容,免得忘记.

00:00/00:00

首先写了一个手机号验证的demo
使用get方式验证手机号
代码如下:

XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<input type="text" id="phone">
</body>
<script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>
<script src="http://cdn.he29.com/layer/layer.js"></script>
<script type="text/javascript">
var host = 'http://4orzfdkze1.proxy.qqbrowser.cc:8000/thinkphp'; //定义全局域名
</script>
<script type="text/javascript">
$('#phone').blur(function() {
var tel = $(this).val();
var telReg = !!tel.match(/^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/);
//如果手机号码不能通过验证
if(telReg == false){
layer.msg('你的手机号输入有误,请检查');
return false;
}
$.get(host+'/home/index/index?phone='+tel, function(data) {
console.log(data);
if (data.code > 0) {
layer.msg(data.message);
}else{
//输入不正确的下一步操作
}
});
});
</script>
</html>

后端代码如下:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public function index()
    {
        Header("Access-Control-Allow-Origin:*");
        Header("Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE");
        $phone = isset($_GET['phone'])?$_GET['phone']:'';
        if (empty($phone)) {
           $this->ajaxReturn(array('message'=>'请先输入手机号','code'=>-2));
        }
        if(preg_match("/1[3458]{1}\d{9}$/",$phone)){  
            $arr = array('message'=>'输入正确','code'=>1);
        }else{  
            $arr = array('message'=>'手机号输入不正确','code'=>-1);
        }  
     $this->ajaxReturn($arr);
    }

输入框失去焦点后,首先前端正则判断手机号输入是否正确,如果正确,使用get方式发送到后台继续判断,

使用post方式传输数据

JavaScript
1
2
3
4
5
$('#sub').blur(function() {
$.post(host+'/home/index/index2', {name:$('#name').val(),age:$('#age').val()}, function(data) {
console.log(data);
});
});

浅谈Ajax的几种常用方法

2015-12-14admin阅读(1946)评论(0)

00:00/00:00

这次我们主要说说常用的三种Ajax方法,
1,get方法,主要是用get方式获取数据,参数通过地址栏传输,
特点:
GET请求能够被缓存
GET请求会保存在浏览器的浏览记录中
以GET请求的URL能够保存为浏览器书签
GET请求有长度限制
GET请求主要用以获取数据
我理解的是: get方式参数在地址栏传输,有长度限制,可以直接看到的,有一定的安全隐患,适合简单地数据查询,不适合用作比如登录等等的操作
2,post方式
特点:post方式:通过post方式获取,以post形式发送数据
特点:
POST请求不能被缓存下来
POST请求不会保存在浏览器浏览记录中
以POST请求的URL无法保存为浏览器书签
POST请求没有长度限制
我所理解的是,post方式因为数据不会显示在地址栏中,也不会缓存下来或保存在浏览记录中,所以看POST求情比GET请求安全,是常用的ajax传输方式.
3,ajax方式
特点:
适合于各种场景下的ajax传输方式,
可以定义各种传输状态,参数较多,比较复杂呢
我所理解的是,ajax方式相对于post方式传输更为复杂,但是使用场景广泛,比如我们需要在ajax发送之前或者之后定义一些操作,或者ajax发送成功或者失败后进行操作,都可以使用此方式,例如 我们数据加载较多,我们需要让用户看到 “加载中…”这样的提示文字,就可以在ajax发送之前的beforeSend方法中定义

XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<input type="button" value="get方式" id="get">
<input type="button" value="post方式" id="post">
<script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>
<script src="http://cdn.he29.com/layer/layer.js"></script> <!-- //弹窗控件 -->
<script type="text/javascript">
var host = 'http://4orzfdkze1.proxy.qqbrowser.cc/demo'; //定义全局域名
</script>
<!-- 第一种,get方式, -->
<script type="text/javascript">
/*get方式*/
function get(){
// $.get('后台地址', function(data) {}); 这是固定格式
$.get(host+'/getData.php?type=get', function(data) { //host+'/getData.php';是访问我电脑上固定的一个php文件.data是我返回给你的内容
layer.msg(data);//把后台返回给你的内容弹出
});
}
$('#post').click(function() {
// $.post('/path/to/file', {param1: 'value1'}, function(data, textStatus, xhr) {
// /*optional stuff to do after success */
// }); 固定格式, {param1: 'value1'}是前端需要发送给后台的数据,json格式,例如我需要发送:名字:姗,年龄:23,
$.post(host+'/getData.php?type=post', {name:'3',age:23}, function(data) {
console.log(data);
});
});
/*Ajax 传输方式*/
$.ajax({
url: host+'/getData.php?type=post', //发送的地址
type: 'default GET (Other values: POST)', //传输方式,例如:post
dataType: 'default: Intelligent Guess (Other values: xml, json, script, or html)',//传输类型,例如:json
data: {param1: 'value1'},//数据 例如 {name:'3',age:23}
success:function(data){ //成功以后
console.log(data);
}
})
.done(function() {
console.log("success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
/*状态对照表http://www.cnblogs.com/tylerdonet/p/3520862.html*/
</script>

  • 上一页
  • 1
  • ···
  • 12
  • 13
  • 14
  • 15
  • 16
  • 下一页
  • 共 16 页
关于我

小天明 北京·朝阳 前端搬砖工程师

碎碎念):(来自公众号)

热门文章

  • 踩坑记录——iphone上safari开启隐身模式时localStorage变为只读-雅荷心语博客踩坑记录——iphone上safari开启隐身模式时localStorage变为只读2017-02-21评论(4)
  • 程序员是怎样一群人-雅荷心语博客程序员是怎样一群人2015-12-08评论(3)
  • 百度你个大毒瘤 - 吐糟博客这几天打不开事情-雅荷心语博客百度你个大毒瘤 – 吐糟博客这几天打不开事情2015-12-28评论(2)
  • PHP 非对称加密 openssl 加密及解密方法-雅荷心语博客PHP 非对称加密 openssl 加密及解密方法2016-05-17评论(2)
  • PHPStorm10 下载安装破解汉化-雅荷心语博客PHPStorm10 下载安装破解汉化2015-12-15评论(2)
2025年7月
一 二 三 四 五 六 日
« 六    
 123456
78910111213
14151617181920
21222324252627
28293031  

最新评论

  • 前端小武 8年前 (2017-04-06)说:
    我看到了layer
  • 丁艳平 8年前 (2017-03-03)说:
  • Dawn 9年前 (2016-09-16)说:
    call_user_func_array最后的例子是错哦,你用bc方法去调用类里 另外一个方法就知道问题所在了。情况1.调用非静态方法 第一个参数应该传[类的实例,调用方法] (既然有类实例了直接-&
  • Dawn 9年前 (2016-06-21)说:
    tp框架设置了全局捕获异常的,这也没什么。坑的是 他捕获了异常。然后全部返回404。。。不知道的 还以为自己网站被删除了
  • Dawn 9年前 (2016-05-17)说:
    构造函数里的判断 用异常机制可能更好一些

其他类型

  • 芊云全景
  • 配音兔AI配音神器

博客类型

  • 芊云全景
  • 配音兔AI配音神器

左邻右舍

  • 易水寒
  • 楼教主
  • 芊云全景
  • 贤心
  • 配音兔AI配音神器

雅荷心语博客 -心之所向便是光

联系我们关于我们

© 2025 雅荷心语博客   网站地图