JavaWeb学习--正则表达式

        正则表达式是一种字符串匹配的模式或者规则,其用于约束字符串的格式和类型,如在注册用户时,可以使用正则表达式限制用户必须输入11位数字的手机号。正则表达式类似于JSON,是一种通用的标准,被各种开发语言所支持,包括但不限于:Java,JavaScript,C,C++,C#,Python,SQL等等;因为在Javaweb项目中正则一般用于前端验证,故此使用JavaScript来进行正则表达式的学习;

        其定义方式有2种,分别是:var reg = new RegExp('^a$');和 var reg = /^a$/;后者推荐在js中使用。其通常使用test()方法 用来查看正则表达式与指定的字符串是否匹配 ,如果正则表达式与指定的字符串匹配 ,返回 true ,否则 false。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>正则表达式</title>
</head>
<body>
<input type="text" id="name" />&nbsp;&nbsp;
<span id="msg"></span><br>
<input type="button" onclick="test()" value="测试">
</body>
<script type="text/javascript">
    function test(){
        var value = document.getElementById("name").value;
        // 定义一个匹配字符a的正则表达式
        var reg = new RegExp('^a$'); // 第一种方式
        //var reg = /^a$/; // 第二种方式 在js中推荐使用
        // 获取正则匹配的结果  true false
        var result = reg.test(value);
        // 定义显示结果
        var html = result ? '合法' : '不合法';
        // 在页面显示正则匹配结果
        document.getElementById("msg").innerHTML = html;
    }
</script>
</html>

        其中大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字。 普通字符只能够匹配字符串中与它们相同的字符。 比如,规定用户只能输入英文26个英文字母,普通字符的话 /[abcdefghijklmnopqrstuvwxyz]/;而一些可以极大提高了灵活性和强大的匹配功能的字符,称为元字符。 比如,规定用户只能输入英文26个英文字母,换成元字符写法: /[a-z]/;此外,还有边界符(位置符)用来提示字符所处的位置,主要有两个字符:^,表示匹配行首的文本;$,表示匹配行尾的文本。

        

<body>
    <script>
// 元字符之边界符
// 1. 匹配开头的位置 ^
// 2. 匹配结束的位置 $
// 3. 精确匹配 ^ $
    const reg2 = /^web$/
    console.log(reg2.test('web前端')) // false
    console.log(reg2.test('前端web')) // false
    console.log(reg2.test('web')) // true
    console.log(reg2.test('webweb')) // flase
    </script>
</body>

除了上述的字符以外,还有一些量词,用于设定某个模式的重复次数:

<body>
    <script>
// 元字符之量词
// 1. * 重复次数 >= 0 次
    const reg1 = /^w*$/
    console.log(reg1.test('')) // true
    console.log(reg1.test('w')) // true
    console.log(reg1.test('ww')) // true
    console.log('-----------------------')
// 2. + 重复次数 >= 1 次
    const reg2 = /^w+$/
    console.log(reg2.test('')) // false
    console.log(reg2.test('w')) // true
    console.log(reg2.test('ww')) // true
    console.log('-----------------------')
// 3. ? 重复次数 0 || 1
    const reg3 = /^w?$/
    console.log(reg3.test('')) // true
    console.log(reg3.test('w')) // true
    console.log(reg3.test('ww')) // false
    console.log('-----------------------')
// 4. {n} 重复 n 次
    const reg4 = /^w{3}$/
    console.log(reg4.test('')) // false
    console.log(reg4.test('w')) // flase
    console.log(reg4.test('ww')) // false
    console.log(reg4.test('www')) // true
    console.log(reg4.test('wwww')) // false
    console.log('-----------------------')
// 5. {n,} 重复次数 >= n
    const reg5 = /^w{2,}$/
    console.log(reg5.test('')) // false
    console.log(reg5.test('w')) // false
    console.log(reg5.test('ww')) // true
    console.log(reg5.test('www')) // true
    console.log('-----------------------')
// 6. {n,m} n =< 重复次数 <= m
    const reg6 = /^w{2,4}$/
    console.log(reg6.test('w')) // false
    console.log(reg6.test('ww')) // true
    console.log(reg6.test('www')) // true
    console.log(reg6.test('wwww')) // true
    console.log(reg6.test('wwwww')) // false
// 7. 注意事项: 逗号两侧千万不要加空格否则会匹配失败
    </script>
</body>

除此之外,元字符可以使用[ ]用于表示字符的范围,定义的规则限定在某个范围,比如只能是英文字母,或者数字等等:

<body>
    <script>
// 元字符之范围 []
// 1. [abc] 匹配包含的单个字符, 多选1
const reg1 = /^[abc]$/    
    console.log(reg1.test('a')) // true
    console.log(reg1.test('b')) // true
    console.log(reg1.test('c')) // true
    console.log(reg1.test('d')) // false
    console.log(reg1.test('ab')) // false
// 2. [a-z] 连字符 单个
    const reg2 = /^[a-z]$/
    console.log(reg2.test('a')) // true
    console.log(reg2.test('p')) // true
    console.log(reg2.test('0')) // false
    console.log(reg2.test('A')) // false
// 想要包含小写字母,大写字母 ,数字
    const reg3 = /^[a-zA-Z0-9]$/
    console.log(reg3.test('B')) // true
    console.log(reg3.test('b')) // true
    console.log(reg3.test(9)) // true
    console.log(reg3.test(',')) // flase
// 用户名可以输入英文字母,数字,可以加下划线,要求 n~m位
    const reg4 = /^[a-zA-Z0-9_]{4,6}$/
    console.log(reg4.test('abc')) // false
    console.log(reg4.test('abcd')) // true
    console.log(reg4.test('ABcd12')) // true
    console.log(reg4.test('ABcd12_')) // false
// 3. [^a-z] 取反符,即除了这些以外的内容
    const reg5 = /^[^a-z]$/
    console.log(reg5.test('a')) // false
    console.log(reg5.test('A')) // true
    console.log(reg5.test(8)) // true
    </script>
</body>

元字符中还有一些方便用户使用的字符,如:

  • \w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
  • \W 匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。
  • \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
  • \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
  • \d 匹配一个数字字符。等价于 [0-9]。
  • \D 匹配一个非数字字符。等价于 [^0-9]。
  • \b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值