正则表达式 匹配至少有一个非空白字符并且不超过指定长度

chinmo 逆向思维解决方案


代码如下:

<script type="text/javascript">
/**
* 至少有一个非空白字符并且不超过6个字符的正则表达式
*
* 作者:chinmo
* 整理:http://www.CodeBit.cn
* 来源:http://topic.csdn.net/u/20090207/18/ffa003ed-ecd4-40e0-b81f-36aa1fe46d85.html#r_55136904
*/
var pattern = /^[\s]{0,}$|^[\w\s]{7,}$/g;
var str = "";
var str1 = " ";
var str2 = "a";
var str3 = "abcdefgabcdefgabcdefgabcdefgg";
var str4 = " a ";
document.write(!pattern.test(str))
document.write(!pattern.test(str1))
document.write(!pattern.test(str2))
document.write(!pattern.test(str3))
document.write(!pattern.test(str4))
</script>

正则表达式规则分析:
^[\s]{0,}$ :整个字符串为空或者都是空白字符
^[\w\s]{7,}$ : 整个字符串长度大于6
作者采用逆向思维,通过匹配不符合条件的情况,再通过取反(注意每个 document.write 中的感叹号)来实现要求达到的效果。
JK_10000 逆向思维解决方案简化版


代码如下:

<script type="text/javascript">
/**
* 至少有一个非空白字符并且不超过6个字符的正则表达式
*
* 作者:JK_10000
* 整理:http://www.CodeBit.cn
* 来源:http://topic.csdn.net/u/20090207/18/ffa003ed-ecd4-40e0-b81f-36aa1fe46d85.html#rt_55145516
*/
var pattern = /.{7}|^\s*$/g;
var str = "";
var str1 = " ";
var str2 = "a";
var str3 = "www.CodeBit.cn";
var str4 = " a ";
document.write(!pattern.test(str))
document.write(!pattern.test(str1))
document.write(!pattern.test(str2))
document.write(!pattern.test(str3))
document.write(!pattern.test(str4))
</script>

正则表达式规则分析:
.{7} : 整个字符串长度大于6,注意:这里的 . 匹配任意字符
^\s*$ :整个字符串为空或者都是空白字符
JK_10000 正向思维解决方案


代码如下:

<script type="text/javascript">
/**
* 至少有一个非空白字符并且不超过6个字符的正则表达式
*
* 作者:JK_10000
* 整理:http://www.CodeBit.cn
* 来源:http://hi.baidu.com/jkisjk/blog/item/b54a7a3d1c7ce3c09f3d629b.html
* 来源:http://topic.csdn.net/u/20090207/18/ffa003ed-ecd4-40e0-b81f-36aa1fe46d85.html#rt_55145611
*/
var pattern = /^(?!.{7}|^\s*$)/g;
var str = "";
var str1 = " ";
var str2 = "a";
var str3 = "www.CodeBit.cn";
var str4 = " a ";
document.write(pattern.test(str))
document.write(pattern.test(str1))
document.write(pattern.test(str2))
document.write(pattern.test(str3))
document.write(pattern.test(str4))
</script>

正则表达式规则分析:
.{7} : 整个字符串长度大于6,注意:这里的 . 匹配任意字符
^\s*$ :整个字符串为空或者都是空白字符
作者使用了正则表达式的顺序否定环视 ,指明开始(^)后面不能有7个及以上字符,或者整个字符串为空(\s 没有的情况下,^$表示内容为空),或者全部都是空白字符 (\s*)。
不过,该正则表达式可以将环视条件中的 ^ 去掉,即 /^(?!.{7}|\s*$)/g , 因为规则一开始就已经有了一个 ^ 。


代码如下:

<script type="text/javascript">
/**
* 至少有一个非空白字符并且不超过6个字符的正则表达式
*
* 作者:JK_10000
* 整理:http://www.CodeBit.cn
* 来源:http://hi.baidu.com/jkisjk/blog/item/b54a7a3d1c7ce3c09f3d629b.html
* 来源:http://topic.csdn.net/u/20090207/18/ffa003ed-ecd4-40e0-b81f-36aa1fe46d85.html#rt_55145611
*/
var pattern = /^(?!.{7}|\s*$)/g;
var str = "";
var str1 = " ";
var str2 = "a";
var str3 = "www.CodeBit.cn";
var str4 = " a ";
document.write(pattern.test(str))
document.write(pattern.test(str1))
document.write(pattern.test(str2))
document.write(pattern.test(str3))
document.write(pattern.test(str4))
</script>

wc 发布在 JK 博客评论中的方案


代码如下:

<script type="text/javascript">
/**
* 至少有一个非空白字符并且不超过6个字符的正则表达式
*
* 作者:wc
* 整理:http://www.CodeBit.cn
* 来源:http://hi.baidu.com/jkisjk/blog/item/b54a7a3d1c7ce3c09f3d629b.html
*/
var pattern = /^(?=.*?\S)[\s\S]{0,6}$/g;
var str = "";
var str1 = " ";
var str2 = "a";
var str3 = "www.CodeBit.cn";
var str4 = " a ";
document.write(pattern.test(str))
document.write(pattern.test(str1))
document.write(pattern.test(str2))
document.write(pattern.test(str3))
document.write(pattern.test(str4))
</script>

正则表达式规则分析:
(?=.*?\S) :肯定顺序环视,指定任意多个任意字符后面有个非空白字符
[\s\S]{0,6} : 6个以内的空白或者非空白字符
在 Javascript 中使用全局匹配修饰符 g 的时候要特别注意,可参考本站的另外一篇文章:Javascript 中使用 exec 进行正则表达式全局匹配时的注意事项

(0)

相关推荐

  • 匹配任意字符的正则表达式写法

    实现代码如下,起初测试正常(后来遇到问题),先来看最初的代码 复制代码 代码如下: var docs = document.body.innerHTML; var links =docs.match(/ed2k.*\|\//gi);//注意这里 使用了点(.)符号匹配任意字符 document.body.innerHTML = ""; for( var link in links){<BR> document.body.innerHTML += links[link]+&q

  • 匹配中文汉字的正则表达式介绍

    \w匹配的仅仅是中文,数字,字母,对于国人来讲,仅匹配中文时常会用到,见下 复制代码 代码如下: 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 或许你也需要匹配双字节字符,中文也是双字节的字符 复制代码 代码如下: 匹配双字节字符(包括汉字在内):[^\x00-\xff] 注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) PS:关于正则,本站还提供了2款非常简便实用的正则表达式工具供大家参考使用: JavaScript正则表达式在线测试工具: http:/

  • php用正则表达式匹配URL的简单方法

    在PHP的官网上看到的parse_url()函数的替代方案.结果和parse_url()函数差不多,是使用正则实现的.URI 是 Web上可用的每种资源 - HTML文档.图像.视频片段.程序等 - 由一个通用资源标志符(Uniform Resource Identifier, 简称"URI")进行定位. 对象分组: 复制代码 代码如下: ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?12            3 

  • js 正则表达式学习笔记之匹配字符串

    今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高亮练手,所以用js代码当作例子) 复制代码 代码如下: var str1 = "我是字符串1哦,快把我取走", str2 = "我是字符串2哦,快把我取走"; 比如这样一个字符串,匹配起来很简单 /"[^"]*"/g 即可.   PS: 白色截图是 chrome 34 控制台中

  • 正则表达式实现最小匹配功能的方法

    本文实例讲述了正则表达式实现最小匹配功能的方法.分享给大家供大家参考,具体如下: 正则表达式默认情况下实现的是最大化匹配,这在有些情况下是非常不愿意出现的,比如下面这段代码: # starting IndiaInventoryAPP.exe" ~~DisplayVariableValues "parameterGroup,mailRecipients,ModuleArgs"~DisplayVariableValues "LogFolder"~$binary

  • 正则表达式匹配任意字符(包括换行符)的写法

    今天在Java中想使用正则表达式来获取一段文本中的任意字符.于是很随意得就写出如下匹配规则: (.*) 结果运行之后才发现,无法获得换行之后的文本.于是查了一下手册,才发现正则表达式中,"."(点符号)匹配的是除了换行符"\n"以外的所有字符.同时,手册上还有一句话:要匹配包括 '\n' 在内的任何字符,请使用像 '[.\n]' 的模式.于是我将正则表达式的匹配规则修改如下: ([.\n]*),当然,如果是在java程序中直接写到话,需要改为([.\\n]*) 结果

  • 匹配yyyy-mm-dd日期格式的的正则表达式

    其实我也很头疼正则表达式,百度了一些资料,总结一下,这里留个备份吧. 要考虑的问题:合法的日期是多少:每个月的天数不一样:闰年的问题.... 1.合法的日期:MSDN上规定--在公元(基督纪元)0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之间的日期和时间 查看http://msdn.microsoft.com/zh-cn/library/system.datetime(VS.80).aspx 2.闰年的概念:百

  • 正则表达式匹配 非XXX的行

    1111111111111  前边有内容,不定123.123.123.10后边有内容,不定  3333333333333  4444444444444 如何匹配"非:.+123.123.123.10.+ "  行 匹配结果是,  1111111111111 3333333333333  4444444444444 结论: ^(?!.*123.123.123.10).*$  或C#里这么操作: textBox2.Text = Regex.Replace(textBox1.Text, @&

  • js正则表达式匹配数字字母下划线等

    1.一个正则表达式,只含有汉字.数字.字母.下划线不能以下划线开头和结尾: ^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$ 其中: ^ 与字符串开始的地方匹配 (?!_) 不能以_开头 (?!.*?_$) 不能以_结尾 [a-zA-Z0-9_\u4e00-\u9fa5]+ 至少一个汉字.数字.字母.下划线 $ 与字符串结束的地方匹配 放在程序里前面加@,否则需要\\进行转义 @"^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]

  • php正则表达式匹配img中任意属性的方法

    经常和图片打交道,不得不用到一些提取图片中scr.alt.title.等的属性,这里总结给大家一些常用的,感觉还不错,比较通用! PHP正则表达式匹配img中任意属性PHP 复制代码 代码如下: <?php /*PHP正则提取图片img标记中的任意属性*/ $str = '<center><img src="/uploads/images/20100516000.jpg" height="120" width="120"&

  • PHP匹配多行的正则表达式分析

    复制代码 代码如下: <table> <tr><td>aaaa</td></tr> <tr><td>bbbb</td></tr> <tr><td>cccc</td></tr> <tr><td>dddd</td></tr> </table> 像这种的文本,用PHP的正则表达式怎么匹配?? 我最初

  • 正则表达式匹配不包含某些字符串的技巧

    经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤"hede"字串,但这种写法是错误的.我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的意思是字符串里不能包含'h','e','d'三个但字符.那什么样的正则表达式能过滤出不包含完整"hello"字串的信息呢? 事实上,说正则表达式里不支持逆向匹配并不是百分之百的正确.就像这个问题,我们就可以使用否定式查找来模拟出逆向匹配,从而解决我们的问

随机推荐