• 正则表达式

    基本的元字符之类的百度谷歌各种正则书都有介绍,就不再重复啦。另外RegExr的cheatsheet也有简要介绍。

    要介绍的是对两个正则的理解。

    1.密码(要求至少8个字符,至少一个数字,至少有一个小写字母和一个大写字母,至少包含一个比如@#%$^的字符,不能包含空白)

    答案是/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#%$^])(?=\S+$).{8,}$/gm

    (?=abc),正向先行断言。自我吐槽一句,“断言”这个词汇硬是理解了半天。不就是“判断的句子”的意思么?所以正向断言就是判断字符串是否满足条件, 但又不消耗字符串的字符。有点像if(abc){}

    因此(?=.*[0-9])就是满足“除换行符以外的其他字符任意个+任意一个数字”这样一个条件。后面4个先行断言也是如此。因此整个正则的意思就是满足这5个 条件的8个以上的任意字符。

    2.千分符

    在一篇介绍正则的文章中看到的这个例子。有意思的是,当初我看不懂那道正则,然后Google了一下相关问题,结果找到了另外一种解法。等我理解完这种解法 后,我才发现Google到的那个正则要比那篇文章中的正则要难理解得多。

        function putComma(price){
          return price.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
          }
    

    (?!abc),负向先行断言。相当于if(!abc){}。所以(?=(?:\d{3})+(?!\d))的意思就是数字的数目要成3的倍数,后面不可有额外的数字。

    用一张图来解释就是这样的:

    regexp
    上述正则的图解
  • 一个尚未解决的问题

    正确的标题不应该是这样的,但是由于此问题尚未解决,不知道该起什么名字好。:)

    起因是某日搜东西的跳到搜狗问问页面,字体如下图般混乱得无力吐槽。

    搜狗问问首页侧栏
    Chrome下搜狗问问首页侧栏

    再查看渲染字体,把我一惊,居然有日文字体。可是明明样式里字体设置font-family: tahoma,arial,helvetica,sans-serif,simsun;除了把宋体错 误地写在最后以外,并没有什么地方设置了日文字体啊。而且,除了html标签未设置lang属性外,也没有什么问题啊。

    Rendered fonts
    Chrome下该页面的渲染字体

    后来发现:原来是Chrome的设置问题啊!因为Safari和FireFox没有这个问题啊!(T_T)。刚好那时候学了一点HTTP方面的知识,发现:原来Chrome 下该网页的HTTP response header的content-language为ja。而FireFox为en-us,Safari为zh-cn。

    Content-language information
    Chrome下该网页的响应头部信息

    且accept-language里ja也是首位的。 原来在Chrome语言设置里,日文被我稀里糊涂地排在了首位!所以,Chrome下会出现日文字体不足为奇啊。

    Content-Language is from the server, and lets the client know what language(s) are present on the requested page. Accept-Language is from the client, and lets the server know the user's preferred language(s).

    可是,为什么相同的设置,大多数网页都是正常的,且响应头里没有content-language信息呢?(后端知识不够啊.T_T)

  • jQuery Dom

    1. append(), appendTo()与after(), insertAfter()

    存在dom里的被插元素.append(新建的插入元素), 新建的插入元素.appendTo(存在dom里的被插元素).

    插入元素作为被插元素的最后一个子孩子。

    after()/insertAfter()相当于append()/appendTo()的关系,不同的是,插入元素是作为被插元素的后相邻节点插入的。

    2. wrap(), wrapAll(), wrapInner()

    已有节点:<strong></strong><strong></strong>

    代码:

    • $("strong").wrap("<b></b>");

    Result: <b><strong></strong></b><b><strong></strong></b>

    • $("strong").wrapAll("<b></b>");

    Result: <b><strong></strong><strong></strong></b>

    • $("strong").wrapInner("<b></b>");

    Result: <strong><b></b></strong><strong><b></b></strong>