zoukankan      html  css  js  c++  java
  • 匹配用户名的正则表达式

    这个表达式非常简单,可是在你想为一个站点建立用户注册系统的时候确实非常有价值。为了开发上的简便,我们通常希望把用户起名字能用的字符限制在一个有限 的集合里(比如一些敏感的字眼或者可能用来做注入攻击的名字,象delete这种都不能允许),同时我们还要防止有的人恶意冒用别人的用户名(比如一个用 户叫Bill Gates,另一个人起名叫Bill Gates,区别只是两个单词见多了一个空格,当然也可能是换行符这种不可见字符,它们在浏览器里面看上去就象同一个人)。

    要是不用正则表达式的话,这个检查会是一个乏味的劳动—先把字符串切割成独立的单词,再一个个检查每个单词的合法性。如果使用正则表达式,就会变成一个很轻松的事情。首先,让我们定义我们想接受的用户名,为了简单起见,我们的示例被限制为只接受下面的条件:

    1. 字母数字字符(英文字母和数字)

    2. 下划线(_)

    与此同时,我们还强制用户名最短3个字符最长不超过16个字符。下面就是符合上述描述条件的正则表达式:
    /[a-zA-Z0-9_]{3,16}/

    如果你非常熟悉正则表达式的话,你会发现这个表达式好像缺了一些东西。不用着急,接下去我会讲到。

    如 果你读过我前面一篇正则表达式的入门文章,你可能已经分析出这个表达式如何工作了。首先,我们定义一个字符分类,它将匹配任何字母(a到z以及A到Z)和 任何数字(0到9),以及_ (下划线)字符。下面接着一个数量范围,它告诉解析引擎我们只接受3到16个之间的字符数量。因为这个数量是指整个字符分类包括的所有字符而不是一个特定 的字符,所以这个数量范围跟在字符分类后面。这个表达式将匹配所有长度在3到16之间,由我们的受限字符集里面字符构成的字符串。

    那么 到底缺了什么?由于我们写的表达式是匹配一个字符串的任何部分。它将不止认为‘mike_84′是合法字符串,同样也会匹配类似‘%! mike_84&’这种包含了我们不希望出现的东西的字符串。我们需要用到行定位点, ^ (caret) 和 $ (dollar) 字符将把我们的表达式限制在一个字符串的起点和终点位置,这样可以确保整个用户名符合我们的设定,而不是一部分。

    所以修订版的正则表达式象这样:
    /^[a-zA-Z0-9_]{3,16}$/

  • 相关阅读:
    SQL Server Code tips (持续更新)
    Oracle 函数 “判断数据表中不存在的数据,才允许通过”
    Oracle 函数 “把当前的用户(审核人,审核通过后)插入到数据表中”
    Oracle 函数 “自动生成订单号”
    Oracle中的instr()函数 详解及应用
    Oracle中的substr()函数 详解及应用
    Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire
    Spring实战(二)Spring容器和bean的生命周期
    Spring实战(一)Spring简介---呕心沥血只为让Java开发更简单。
    git、git bash、git shell
  • 原文地址:https://www.cnblogs.com/webu/p/2770947.html
Copyright © 2011-2022 走看看