栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 云计算 > 云平台

四、大数据技术之shell编程

云平台 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

四、大数据技术之shell编程

一、shell简要介绍

1)Linux提供的Shell解析器有:

# cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

2)bash和sh的关系,属于

 ll | grep bash
-rwxr-xr-x. 1 root root 941880 5月  11 2016 bash
lrwxrwxrwx. 1 root root      4 5月  27 2017 sh -> bash

3)Centos默认的解析器是bash

echo $SHELL
/bin/bash
二、Shell脚本入门

1)脚本格式
脚本以#!/bin/bash开头(指定解析器)

2)第一个Shell脚本:helloworld
(1)需求:创建一个Shell脚本,输出helloworld

#创建脚本文件
touch helloworld.sh

#编写脚本
vi helloworld.sh

在helloworld.sh中输入如下内容
#!/bin/bash
echo "helloworld"

#执行脚本
sh helloworld.sh 

#(必须具有可执行权限+x)!!!!


#直接执行
helloworld.sh 

注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。

三、变量

3.1 系统预定义变量

1)常用系统变量

$HOME、$PWD、$SHELL、$USER

2)显示当前Shell中所有变量:set

3.2 自定义变量

(1)定义变量:变量=值 
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset

2)变量定义规则

(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
(1)定义变量A

 A=5
 
 echo $A
 
(2)给变量A重新赋值
 A=8
 echo $A

(3)撤销变量Aunset A
 echo $A
 
(4)声明静态的变量B=2,不能unset
readonly B=2
echo $B

(5)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
 C=1+2
 echo $C
 
(6)变量的值如果有空格,需要使用双引号或单引号括起来
 D=I love banzhang
 D="I love banzhang"
 echo $D
 
(7)可把变量提升为全局环境变量,可供其他Shell程序使用
export 变量名
export B

3.3 特殊变量

$n
$n (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})

touch parameter.sh 

vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"

chmod 777 parameter.sh

./parameter.sh cls  xz
$#	(功能描述:获取所有输入参数个数,常用于循环)。
2)案例实操
vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"
echo $#

chmod 777 parameter.sh
 
./parameter.sh cls  xz
$*	(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@	(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
注意:如果想让$*和$@ 体现区别必须用双引号括起来才生效

vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"
echo $#
echo $*
echo $@

bash parameter.sh 1 2 3


$?	(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
./helloworld.sh 

hello world

echo $?
计算(2+3)X4的值
 S = $[(2+3)*4]
 echo $S
== 字符串比较
-lt 小于(less than)			-le 小于等于(less equal)
-eq 等于(equal)				-gt 大于(greater than)
-ge 大于等于(greater equal)	    -ne 不等于(Not equal)
(2)按照文件权限进行判断
-r 有读的权限(read)			    -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence)		    -d 文件存在并是一个目录(directory)
(1)23是否大于等于22
 [ 23 -ge 22 ]
echo $?

(2)helloworld.sh是否具有写权限
 [ -w helloworld.sh ]
 echo $?

(3)/home/atguigu/cls.txt目录中的文件是否存在
 [ -e /home/atguigu/cls.txt ]
 echo $?
(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
[ condition ] && echo OK || echo notok

[ condition ] && [ ] || echo notok
四、流程控制(重点)

if判断

输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。
touch if.sh

vim if.sh

#!/bin/bash
if [ $1 -eq "1" ]
then
        echo "banzhang zhen shuai"
elif [ $1 -eq "2" ]
then
        echo "cls zhen mei"
fi

chmod 777 if.sh 
./if.sh 1

case语句

输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。
touch case.sh
vim case.sh

#!/bin/bash
case $1 in
"1")
        echo "banzhang"
;;

"2")
        echo "cls"
;;
*)
        echo "renyao"
;;
esac

chmod 777 case.sh

./case.sh 1

for循环

从1加到100
touch for1.sh
vim for1.sh

#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
        s=$[$s+$i]
done
echo $s

chmod 777 for1.sh 
./for1.sh 


(1)打印所有输入参数
touch for2.sh
vim for2.sh

#!/bin/bash
#打印数字
for i in $*
    do
      echo "ban zhang love $i "
    done

 chmod 777 for2.sh 
 bash for2.sh cls xz bd


(2)比较$*和$@区别
$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。
touch for.sh

 vim for.sh

#!/bin/bash 
for i in $*
do
      echo "ban zhang love $i "
done

for j in $@
do      
        echo "ban zhang love $j"
done

bash for.sh cls xz bd


当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数。
[atguigu@hadoop101 datas]$ vim for.sh

#!/bin/bash 
for i in "$*" 
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次 
        do 
                echo "ban zhang love $i"
        done 
for j in "$@" 
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次 
        do 
                echo "ban zhang love $j" 
done

chmod 777 for.sh
bash for.sh cls xz bd

while循环

从1加到100
touch while.sh
vim while.sh

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s+$i]
        i=$[$i+1]
done

echo $s

chmod 777 while.sh 

./while.sh 
五、read读取控制台输入
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
参数
	变量:指定读取值的变量名
提示7秒内,读取控制台输入的名称
touch read.sh
vim read.sh

#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME

./read.sh 
六、函数

系统函数

1、basename
(功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉

截取该/home/atguigu/banzhang.txt路径的文件名称
basename /home/atguigu/banzhang.txt 

basename /home/atguigu/banzhang.txt .txt


2、dirname
dirname 文件绝对路径		(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
获取banzhang.txt文件的路径
 dirname /home/atguigu/banzhang.txt 
/home/atguigu

自定义函数

(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
计算两个输入参数的和
touch fun.sh
 vim fun.sh

#!/bin/bash
function sum()
{
    s=0
    s=$[ $1 + $2 ]
    echo "$s"
}

read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

 chmod 777 fun.sh
 ./fun.sh 
七、Shell工具

1、cut
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

选项参数			功能
-f				列号,提取第几列
-d				分隔符,按照指定分隔符分割列
-c				指定具体的字符

#准备数据
 touch cut.txt
 
vim cut.txt

dong shen
guan zhen
wo  wo
lai  lai
le  le
(2)切割cut.txt第一列
 cut -d " " -f 1 cut.txt 

(3)切割cut.txt第二、三列
cut -d " " -f 2,3 cut.txt 

(4)在cut.txt文件中切割出guan
cat cut.txt | grep "guan" | cut -d " " -f 1

(5)选取系统PATH变量值,第2个“:”开始后的所有路径:
 echo $PATH
echo $PATH | cut -d: -f 2-

(6)切割ifconfig 后打印的IP地址
ifconfig eth0 | grep "inet addr" | cut -d: -f 2 | cut -d" " -f1


2、awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename

选项参数		功能
-F			指定输入文件折分隔符
-v			赋值一个用户定义变量
(1)数据准备
 sudo cp /etc/passwd ./
 
 (2)搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
 awk -F: '/^root/{print $7}' passwd 

(3)搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割。
 awk -F: '/^root/{print $1","$7}' passwd 

注意:只有匹配了pattern的行才会执行action

(4)只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"。
 awk -F : 'BEGIN{print "user, shell"} {print $1","$7} END{print "dahaige,/bin/zuishuai"}' passwd
 
注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

(5)将passwd文件中的用户id增加数值1并输出
awk -v i=1 -F: '{print $3+i}' passwd
**awk的内置变量**
变量			说明
FILENAME	文件名
NR			已读的记录数(行数)
NF			浏览记录的域的个数(切割后,列的个数)
(1)统计passwd文件名,每行的行号,每行的列数
awk -F: '{print "filename:"  FILENAME ", linenumber:" NR  ",columns:" NF}' passwd 


(2)切割IP
ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk -F " " '{print $1}' 

(3)查询cut.txt中空行所在的行号
[atguigu@hadoop102 datas]$ awk '/^$/{print NR}' cut.txt 

3、sort
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。

sort(选项)(参数)
选项		说明
-n		依照数值的大小排序
-r		以相反的顺序来排序
-t		设置排序时所用的分隔字符
-k		指定需要排序的列
(1)数据准备
 touch sort.sh
vim sort.sh 
bb:40:5.4
bd:20:4.2
xz:50:2.3`在这里插入代码片`
cls:10:3.5
ss:30:1.6

(2)按照“:”分割后的第三列倒序排序。
 sort -t : -nrk 3  sort.sh 
八、正则表达式入门

1、常规匹配
一串不包含特殊字符的正则表达式匹配它自己,例如:

grep orange

2、常用特殊字符

1)特殊字符:^
^ 匹配一行的开头,例如:

cat /etc/passwd | grep ^a

会匹配出所有以a开头的行

2)特殊字符:$
$ 匹配一行的结束,例如
 cat /etc/passwd | grep t$
 
会匹配出所有以t结尾的行
思考:^$ 匹配什么?

3)特殊字符:.
. 匹配一个任意的字符,例如
 cat /etc/passwd | grep r..t
会匹配包含rabt,rbbt,rxdt,root等的所有行

4)特殊字符:*
* 不单独使用,他和左边第一个字符连用,表示匹配上一个字符0次或多次,例如
* 
cat /etc/passwd | grep ro*t

会匹配rt, rot, root, rooot, roooot等所有行
思考:.* 匹配什么?

5)特殊字符:[ ]
[ ] 表示匹配某个范围内的一个字符,例如
[6,8]------匹配6或者8
[a-z]------匹配一个a-z之间的字符
[a-z]*-----匹配任意字母字符串
[a-c, e-f]-匹配a-c或者e-f之间的任意字符

 cat /etc/passwd | grep r[a,b,c]*t
 
会匹配rat, rbt, rabt, rbact等等所有行

6)特殊字符:
 表示转义,并不会单独使用。由于所有特殊字符都有其特定匹配模式,当我们想匹配某一特殊字符本身时(例如,我想找出所有包含 '$' 的行),就会碰到困难。此时我们就要将转义字符和特殊字符连用,来表示特殊字符本身,例如
cat /etc/passwd | grep a$b

注意:直接匹配 $ 字符,需要进行转义并且加上单引号
就会匹配所有包含 a$b 的行。
九、正则常用匹配汇总
正则匹配全部汇总:
1、匹配中文:	[u4e00-u9fa5]

2、英文字母:	[a-zA-Z]

3、数字	:[0-9]

4、匹配中文,英文字母和数字及下划线:^[u4e00-u9fa5_a-zA-Z0-9]+$
同时判断输入长度:
[u4e00-u9fa5_a-zA-Z0-9_]{4,10}

5、
(?!_)  不能以_开头
(?!.*?_$)  不能以_结尾
[a-zA-Z0-9_u4e00-u9fa5]+  至少一个汉字、数字、字母、下划线
$  与字符串结束的地方匹配

6、只含有汉字、数字、字母、下划线,下划线位置不限:
^[a-zA-Z0-9_u4e00-u9fa5]+$

7、由数字、26个英文字母或者下划线组成的字符串
^w+$

8、2~4个汉字
"^[u4E00-u9FA5]{2,4}$";

9、最长不得超过7个汉字,或14个字节(数字,字母和下划线)正则表达式
^[u4e00-u9fa5]{1,7}$|^[dA-Za-z_]{1,14}$

10、匹配双字节字符(包括汉字在内):[^x00-xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

11、匹配空白行的正则表达式:ns*r
评注:可以用来删除空白行

12、匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

13、匹配首尾空白字符的正则表达式:^s*|s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

14、匹配Email地址的正则表达式:^[a-zA-Z0-9][w.-]*[a-zA-Z0-9]@[a-zA-Z0-9][w.-]*[a-zA-Z0-9].[a-zA-Z][a-zA-Z.]*[a-zA-Z]$
评注:表单验证时很实用

15、手机号:^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))d{8}$

16、身份证:(^d{15}$)|(^d{17}([0-9]|X|x)$)

17、匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

18、匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用

19、匹配国内电话号码:d{3}-d{8}|d{4}-d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

20、匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始

21、匹配中国邮政编码:[1-9]d{5}(?!d)
评注:中国邮政编码为6位数字

22、匹配身份证:d{15}|d{18}
评注:中国的身份证为15位或18位

23、匹配ip地址:d+.d+.d+.d+
评注:提取ip地址时有用

24、匹配特定数字:
^[1-9]d*$    //匹配正整数
^-[1-9]d*$   //匹配负整数
^-?[1-9]d*$   //匹配整数
^[1-9]d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数
^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正

25、匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

26、
在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:
只能输入数字:“^[0-9]*$”
只能输入n位的数字:“^d{n}$”
只能输入至少n位数字:“^d{n,}$”
只能输入m-n位的数字:“^d{m,n}$”
只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”
只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”
只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$”
只能输入非零的正整数:“^+?[1-9][0-9]*$”
只能输入非零的负整数:“^-[1-9][0-9]*$”
只能输入长度为3的字符:“^.{3}$”
只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”
只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”
只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”
只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$”
只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$”
验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为:以字母开头,长度在6-18之间,
只能包含字符、数字和下划线。
验证是否含有^%&',;=?$"等字符:“[^%&',;=?$x22]+”
只能输入汉字:“^[u4e00-u9fa5],{0,}$”
验证Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”
验证身份证号(15位或18位数字):“^d{15}|d{}18$”
验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”
正确格式为:“01”“09”和“1”“31”。
匹配中文字符的正则表达式: [u4e00-u9fa5]
匹配双字节字符(包括汉字在内):[^x00-xff]
匹配空行的正则表达式:n[s| ]*r
匹配HTML标记的正则表达式:/<(.*)>.*|<(.*) />/
匹配首尾空格的正则表达式:(^s*)|(s*$)
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

一、校验数字的表达式
只含数字:^[0-9]*$
n位的数字:^d{n}$
至少n位的数字:^d{n,}$
m-n位的数字:^d{m,n}$
零和非零开头的数字:^(0|[1-9][0-9]*)$
非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
带1-2位小数的正数或负数:^(-)?d+(.d{1,2})$
正数、负数、和小数:^(-|+)?d+(.d+)?$
有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
非零的正整数:^[1-9]d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^+?[1-9][0-9]*$
非零的负整数:^-[1-9][]0-9"*$ 或 ^-[1-9]d*$
非负整数:^d+$ 或 ^[1-9]d*|0$
非正整数:^-[1-9]d*|0$ 或 ^((-d+)|(0+))$
非负浮点数:^d+(.d+)?$ 或 ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$
非正浮点数:^((-d+(.d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$
正浮点数:^[1-9]d*.d*|0.d*[1-9]d*$ 或 ^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$
负浮点数:^-([1-9]d*.d*|0.d*[1-9]d*)$ 或 ^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数:^(-?d+)(.d+)?$ 或 ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$

二、校验字符的表达式
汉字:^[u4e00-u9fa5]{0,}$
英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
长度为3-20的所有字符:^.{3,20}$
由26个英文字母组成的字符串:^[A-Za-z]+$
由26个大写英文字母组成的字符串:^[A-Z]+$
由26个小写英文字母组成的字符串:^[a-z]+$
由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
由数字、26个英文字母或者下划线组成的字符串:^w+$ 或 ^w{3,20}$
中文、英文、数字包括下划线:^[u4E00-u9FA5A-Za-z0-9_]+$
中文、英文、数字但不包括下划线等符号:^[u4E00-u9FA5A-Za-z0-9]+$ 或 ^[u4E00-u9FA5A-Za-z0-9]{2,20}$
可以输入含有^%&',;=?$"等字符:[^%&',;=?$x22]+
禁止输入含有~的字符:[^~x22]+

三、特殊需求表达式
Email地址:^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
SQL中Email的正则匹配:"^[A-Za-z0-9]+([_.][A-Za-z0-9]+)*@([A-Za-z0-9-]+.)+[A-Za-z]{2,6}$"
域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?
InternetURL:[a-zA-z]+://[^s]* 或 ^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$
手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])d{8}$
电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^((d{3,4}-)|d{3.4}-)?d{7,8}$
国内电话号码(0511-4405222、021-87888822):d{3}-d{8}|d{4}-d{7}
电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((d{11})|^((d{7,8})|(d{4}|d{3})-(d{7,8})|(d{4}|d{3})-(d{7,8})-(d{4}|d{3}|d{2}|d{1})|(d{7,8})-(d{4}|d{3}|d{2}|d{1}))$)
身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)
帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]w{5,17}$
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间):^(?=.*d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$
强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-10之间):^(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
日期格式:^d{4}-d{1,2}-d{1,2}
一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
钱的输入格式:
有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$
中文字符的正则表达式:[u4e00-u9fa5]
双字节字符:[^x00-xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
空白行的正则表达式:ns*r (可以用来删除空白行)
HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正则表达式:^s*|s*$或(^s*)|(s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
中国邮政编码:[1-9]d{5}(?!d) (中国邮政编码为6位数字)
IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/897115.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号