汉字和字母字符正则实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汉字和字母字符正则实例相关的知识,希望对你有一定的参考价值。

参考技术A <li style="position: relative;">

<label style="float: left; max-width: 240px;"><!-- <span>★</span> --> 服务内容 : </label>

<textarea  class="workOrder_serviceContent_edit" id="taskCustPhone_serviceContent" name=cmemo maxlength="500" onkeyup="compute_length_index_add(this)" limit="notnull:string:1:500">22</textarea>

<p class="compute_length_number_add test" style="position: absolute;bottom: -20px;left: 115px;color: red;" title="最多可输入250个汉字">所输入剩余<span id="compute_length_number_add">500</span>个字符</p>

<p class="test"  style="position: absolute;bottom: -20px;left: 115px;color: red;">最多可输入250个汉字</p>

</li>

<script type="text/javascript">

$(function()

$(".test").hide()

var obj=$("#taskCustPhone_serviceContent");

var tno = $("#compute_length_number_add");

var maxlength = $("#taskCustPhone_serviceContent").attr("maxlength");

var lenE = obj.val().length;

var lenC = 0;

var CJK = obj.val().match(/[\u4E00-\u9FA5\uF900-\uFA2D]/g);

if(CJK != null)

lenC += CJK.length;

tno.text(parseInt(maxlength) - parseInt(lenC) - parseInt(lenE));

if(tno.text() == 500 )

$(".test").eq(0).hide()

$(".test").eq(1).show()

else if(tno.text() < 500)

$(".test").eq(1).hide()

$(".test").eq(0).show()



if(tno.text() < 0)

tno.text("0")

var tmp = 0

var cut = obj.val().substring(0, maxlength);

for(var i = 0; i < cut.length; i++)

tmp += /[\u4E00-\u9FA5\uF900-\uFA2D]/.test(cut.charAt(i)) ? 2 : 1;

if(tmp > maxlength) break;



obj.val() = cut.substring(0, i);



)

function compute_length_index_add(obj)

var tno = $("#compute_length_number_add");

var maxlength = $("#taskCustPhone_serviceContent").attr("maxlength");

var lenE = obj.value.length;

var lenC = 0;

var CJK = obj.value.match(/[\u4E00-\u9FA5\uF900-\uFA2D]/g);

if(CJK != null)

lenC += CJK.length;

tno.text(parseInt(maxlength) - parseInt(lenC) - parseInt(lenE));

if(tno.text() == 500 )

$(".test").eq(0).hide()

$(".test").eq(1).show()

else if(tno.text() < 500)

$(".test").eq(1).hide()

$(".test").eq(0).show()



if(tno.text() < 0)

tno.text("0")

var tmp = 0

var cut = obj.value.substring(0, maxlength);

for(var i = 0; i < cut.length; i++)

tmp += /[\u4E00-\u9FA5\uF900-\uFA2D]/.test(cut.charAt(i)) ? 2 : 1;

if(tmp > maxlength) break;



obj.value = cut.substring(0, i);





</script>

一张思维导图,让正则表达式不再难懂


推荐阅读:






一张精彩的导图 


一张思维导图,让正则表达式不再难懂


导图内容解析


语法结构

字符

  • 普通字符:字母、数字、汉字、下划线,匹配与之相同的一个字符

  • 简单转义字符:\n(换行),\t(制表),\\(\本身)和 \^...(\^等有特殊作用的符号如要匹配自己的话要用转义)

  • 标准字符集合
    注意区分大小写,大写是相反的意思,匹配相反是不匹配

    • \d
      任意一个数字,0~9

    • \w
      任意一个字母、数字、汉字或下划线,A~Z、a~z、0~9、_和任意一个汉字

    • \s
      任意空白符,包括空格、制表符、换行符

    • .
      小数点可以匹配任意一个字符,换行除外(如果要匹配包括"\n"在内的所有字符,一般用[\s\S])

  • 自定义字符集合
    [ ]方括号匹配方式,能够匹配方括号中的任意一个字符,^表示取反

    • [ab5@]
      匹配"a"或"b"或"5"或"@"

    • [^abc]
      匹配a、b、c之外的任意字符

    • [f-k]
      匹配“f"到"k"之间的字符

    • [^A-F0-3]
      匹配“A"-"F","0"-"3"之外的任意一个字符

量词(Quantifier) 
修饰前面的一个表达式,如果要修饰多个表达式,就用( )把表达式包起来

  • {n}
    表达式重复n次

  • {m,n}
    表达式至少重复m次,最多重复n次

    • 贪婪模式 (默认)
      匹配符合的最长的字符串

    • 非贪婪模式 (在量词后面加 ? 例:{m,n}? )
      匹配符合的最短的字符串

  • {m,}
    表达式至少重复m次


  • 匹配表达式0或1次,相当于{0,1}

  • +
    表达式至少出现一次,相当于{1,}

  • *
    表达式不出现或出现任意次,相当于{0,}

字符边界 
零宽:匹配的不是字符而是位置,符合某种条件的位置

  • ^
    与字符串开始的地方匹配

  • $
    与字符串结束的地方匹配

  • \b
    匹配一个单词的边界,当前位置前面的字符和后面的字符不全是\w

预搜索(零宽断言、环视)
零宽:匹配的不是字符而是位置,符合某种条件的位置

  • (?=exp)
    断言自身出现的位置的后面能匹配表达式exp

  • (?!exp)
    断言自身出现的位置的后面不能匹配表达式exp

  • (?<=exp)
    断言自身出现的位置的前面能匹配表达式exp

  • (?<!exp)
    断言自身出现的位置的前面不能匹配表达式exp

匹配模式
对文本的处理方式

  • IGNORECASE 忽略大小写模式

    • 匹配时忽略大小写

    • 默认是区分大小写的

  • SINGLELINE 单行模式

    • 整个文本看作一个字符串,只有一个开头一个结尾

    • 使小数点"."可以匹配包含换行符(\n)在内的任意字符

  • MULTILINE 多行模式

    • 每行都是一个字符串

    • 在多行模式下,如果需要仅匹配字符串开始和结束位置,可以使用\A和\Z

选择符和分组
分支结构、捕获组合非捕获组

  • | 分支结构
    左右表达式之间“或”关系,匹配左边或右边

  • ( ) 捕获组

    • (1)、在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰

    • (2)、取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到

    • (3)、每一对括号会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号。捕获编号为零的第一个捕获是整个正则表达式模式匹配的文本

    • 反向引用:通过反向引用,可以对分组已捕获的字符串进行引用。

  • (?:Expression) 非捕获组
    一些表达式中,不得不使用(),但又不需要保存()中子表达式匹配的内容,这时可以用非捕获组来抵消()带来的副作用。


一张思维导图,让正则表达式不再难懂


一张思维导图,让正则表达式不再难懂


推荐阅读




点击“阅读原文”查看更多精彩内容

以上是关于汉字和字母字符正则实例的主要内容,如果未能解决你的问题,请参考以下文章

java正则提取字符串中的符号汉字数字字母

求一个PHP正则表达式匹配(字母、数字、汉字、下划线)

英文字母汉字组成的字符串,用正则给英文单词前后加上空格

求一去乱码、汉字的正则表达式

英文字母汉字组成的字符串,用正则给英文单词前后加空格

车牌号校验正则表达式