자바 스크립트 고급 4

1. 정규식 개요

1.1 정규식이란?

정규식 (정규식)은 문자열의 문자 조합을 일치시키는 데 사용되는 패턴입니다. JavaScript에서 정규식은 객체이기도합니다.

일반 테이블은 일반적으로 확인 양식과 같이 특정 패턴 (규칙)을 충족하는 텍스트를 검색하고 대체하는 데 사용됩니다. 사용자 이름 양식에는 영어 문자, 숫자 또는 밑줄 만 입력 할 수 있으며 중국어 (일치)는 입력 할 수 있습니다. 별명 입력 상자. 또한 정규식은 페이지 콘텐츠에서 민감한 단어를 필터링 (대체)하거나 문자열 (추출) 등에서 원하는 특정 부분을 얻는 데 자주 사용됩니다.

다른 언어도 정규식을 사용합니다.이 단계에서는 주로 JavaScript 정규식을 사용하여 양식 유효성 검사를 완료합니다.

1.2 정규식의 특성

  1. 유연성, 논리 및 기능은 매우 강력합니다.
  2. 문자열의 복잡한 제어는 매우 간단한 방법으로 빠르게 달성 할 수 있습니다.
  3. 처음 접하는 사람들에게는 더 모호하고 이해하기 어렵습니다. 예 : ^ \ w + ([-+.] \ w +) @ \ w + ([-.] \ w +) . \ w + ([-.] \ w +) * $
  4. 실제 개발에서는 일반적으로 작성된 정규식을 직접 복사하지만 실제 상황에 따라 정규식을 사용하고 정규식을 수정해야합니다.
  5. 예 : 사용자 이름 : / 1 {3,16} $ /

2. js에서 정규식 사용

2.1 정규 표현식 생성

JavaScript에서는 두 가지 방법으로 정규식을 만들 수 있습니다.

방법 1 : RegExp 개체의 생성자를 호출하여 만들기

var regexp = new RegExp(/123/);
console.log(regexp);

방법 2 : 리터럴을 사용하여 정규식 만들기

 var rg = /123/;

2.2 정규식 테스트

test () 일반 객체 메서드는 문자열이 규칙을 준수하는지 여부를 감지하는 데 사용되며 객체는 true 또는 false를 반환하며 해당 매개 변수는 테스트 문자열입니다.

var rg = /123/;
console.log(rg.test(123));//匹配字符中是否出现123  出现结果为true
console.log(rg.test('abc'));//匹配字符中是否出现123 未出现结果为false

여기에 사진 설명 삽입

3. 정규식의 특수 문자

3.1 정규 표현식의 구성

정규식은 / abc /와 같은 단순 문자 또는 / ab * c /와 같은 단순 및 특수 문자의 조합으로 구성 될 수 있습니다. 그 중에서 특수 문자는 ^, $, + 등과 같은 정규 표현식에서 특별한 의미를 갖는 특수 기호 인 메타 문자라고도합니다.

많은 특수 문자가 있으며 다음을 참조 할 수 있습니다.

MDN

jQuery 매뉴얼 : 정규식 섹션

[일반 테스트 도구] (<http://tool.oschina.net/regex)

3.2 경계 문자

정규식에서 경계 문자 (위치 문자)는 문자의 위치를 ​​나타내는 데 사용되며 주로 두 문자가 있습니다.

경계 문자 기술
^ 매치 라인의 시작 부분에있는 텍스트를 나타냅니다 (다음으로 시작)
$ 일치하는 줄의 끝에있는 텍스트를 나타냅니다 (누구로 끝남).

^와 $가 함께 있으면 정확히 일치해야합니다.

var rg = /abc/; // 正则表达式里面不需要加引号 不管是数字型还是字符串型
// /abc/ 只要包含有abc这个字符串返回的都是true
console.log(rg.test('abc'));
console.log(rg.test('abcd'));
console.log(rg.test('aabcd'));
console.log('---------------------------');
var reg = /^abc/;
console.log(reg.test('abc')); // true
console.log(reg.test('abcd')); // true
console.log(reg.test('aabcd')); // false
console.log('---------------------------');
var reg1 = /^abc$/; // 精确匹配 要求必须是 abc字符串才符合规范
console.log(reg1.test('abc')); // true
console.log(reg1.test('abcd')); // false
console.log(reg1.test('aabcd')); // false
console.log(reg1.test('abcabc')); // false

3.3 캐릭터 클래스

문자 클래스는 해당 문자 중 하나와 일치하는 한 선택할 수있는 일련의 문자가 있음을 의미합니다. 사용 가능한 모든 문자는 대괄호 안에 표시됩니다.

3.3.1 [] 대괄호

선택할 일련의 문자가 있음을 나타내며 그중 하나와 일치합니다.

var rg = /[abc]/; // 只要包含有a 或者 包含有b 或者包含有c 都返回为true
console.log(rg.test('andy'));//true
console.log(rg.test('baby'));//true
console.log(rg.test('color'));//true
console.log(rg.test('red'));//false
var rg1 = /^[abc]$/; // 三选一 只有是a 或者是 b  或者是c 这三个字母才返回 true
console.log(rg1.test('aa'));//false
console.log(rg1.test('a'));//true
console.log(rg1.test('b'));//true
console.log(rg1.test('c'));//true
console.log(rg1.test('abc'));//true
----------------------------------------------------------------------------------
var reg = /^[a-z]$/ //26个英文字母任何一个字母返回 true  - 表示的是a 到z 的范围  
console.log(reg.test('a'));//true
console.log(reg.test('z'));//true
console.log(reg.test('A'));//false
-----------------------------------------------------------------------------------
//字符组合
var reg1 = /^[a-zA-Z0-9]$/; // 26个英文字母(大写和小写都可以)任何一个字母返回 true  
------------------------------------------------------------------------------------
//取反 方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false 。
var reg2 = /^[^a-zA-Z0-9]$/;
console.log(reg2.test('a'));//false
console.log(reg2.test('B'));//false
console.log(reg2.test(8));//false
console.log(reg2.test('!'));//true

3.3.2 수량 자

수량자는 패턴 발생 수를 설정하는 데 사용됩니다.

수량 자 기술
* 0 회 이상 반복
+ 1 회 이상 반복
? 0 ~ 1 회 반복
{엔} n 번 반복
{엔,} n 회 이상 반복
{n, m} n ~ m 회 반복

3.3.3 사용자 이름 양식 유효성 검사

기능 요구 사항:

  1. 사용자 이름이 합법적 인 경우 다음 프롬프트 메시지는 다음과 같습니다. 사용자 이름은 합법적이고 색상은 녹색입니다.
  2. 사용자 이름 입력이 잘못된 경우 다음 프롬프트 메시지는 다음과 같습니다. 사용자 이름이 사양을 충족하지 않고 색상이 빨간색입니다.
    여기에 사진 설명 삽입
    여기에 사진 설명 삽입

분석:

  1. 사용자 이름은 영문, 숫자, 밑줄 또는 대시로만 구성 할 수 있으며 사용자 이름의 길이는 6-16 자리입니다.
  2. 먼저이 정규식 패턴을 준비합니다 / $ [a-zA-Z0-9 -_] {6,16} ^ /
  3. 양식이 포커스를 잃으면 유효성 검사가 시작됩니다.
  4. 일반 사양을 준수하는 경우 span 태그가 올바른 클래스를 추가하도록합니다.
  5. 일반 사양을 따르지 않는 경우 span 태그가 잘못된 클래스를 추가하도록합니다.
<input type="text" class="uname"> <span>请输入用户名</span>
 <script>
 //  量词是设定某个模式出现的次数
 var reg = /^[a-zA-Z0-9_-]{6,16}$/; // 这个模式用户只能输入英文字母 数字 下划线 中划线
 var uname = document.querySelector('.uname');
 var span = document.querySelector('span');
 uname.onblur = function() {
    
    
   if (reg.test(this.value)) {
    
    
   console.log('正确的');
   span.className = 'right';
   span.innerHTML = '用户名格式输入正确';
   } else {
    
    
   console.log('错误的');
   span.className = 'wrong';
   span.innerHTML = '用户名格式输入不正确';
   }
 }
</script>

3.3.4 브래킷 요약

1. 중괄호 수량 자 내부는 반복 횟수를 나타냅니다.

2. 대괄호 문자 세트. 대괄호 안의 모든 문자와 일치합니다.

3. 괄호는 우선 순위를 나타냅니다.

정규식 온라인 테스트

3.4 미리 정의 된 클래스

미리 정의 된 클래스는 몇 가지 일반적인 패턴에 대한 속기를 참조합니다.
여기에 사진 설명 삽입

사례 : 유선 번호 확인

var reg = /^\d{3}-\d{8}|\d{4}-\d{7}$/;
var reg = /^\d{3,4}-\d{7,8}$/;

양식 유효성 검사 사례

//手机号验证:/^1[3|4|5|7|8][0-9]{9}$/;
//验证通过与不通过更换元素的类名与元素中的内容
 if (reg.test(this.value)) {
    
    
    // console.log('正确的');
    this.nextElementSibling.className = 'success';
    this.nextElementSibling.innerHTML = '<i class="success_icon"></i> 恭喜您输入正确';
   } else {
    
    
       // console.log('不正确');
      this.nextElementSibling.className = 'error';
      this.nextElementSibling.innerHTML = '<i class="error_icon"></i>格式不正确,请从新输入 ';
 }
//QQ号验证: /^[1-9]\d{4,}$/; 
//昵称验证:/^[\u4e00-\u9fa5]{2,8}$/
//验证通过与不通过更换元素的类名与元素中的内容 ,将上一步的匹配代码进行封装,多次调用即可
 function regexp(ele, reg) {
    
    
    ele.onblur = function() {
    
    
      if (reg.test(this.value)) {
    
    
        // console.log('正确的');
        this.nextElementSibling.className = 'success';
        this.nextElementSibling.innerHTML = '<i class="success_icon"></i> 恭喜您输入正确';
   } else {
    
    
     // console.log('不正确');
     this.nextElementSibling.className = 'error';
     this.nextElementSibling.innerHTML = '<i class="error_icon"></i> 格式不正确,请从新输入 ';
            }
        }
 };

//密码验证:/^[a-zA-Z0-9_-]{6,16}$/
//再次输入密码只需匹配与上次输入的密码值 是否一致

3.5 정기 교체 교체

replace () 메서드는 문자열 대체 작업을 구현할 수 있습니다. 대체에 사용되는 매개 변수는 문자열 또는 정규식 일 수 있습니다.

var str = 'andy和red';
var newStr = str.replace('andy', 'baby');
console.log(newStr)//baby和red
//等同于 此处的andy可以写在正则表达式内
var newStr2 = str.replace(/andy/, 'baby');
console.log(newStr2)//baby和red
//全部替换
var str = 'abcabc'
var nStr = str.replace(/a/,'哈哈')
console.log(nStr) //哈哈bcabc
//全部替换g
var nStr = str.replace(/a/a,'哈哈')
console.log(nStr) //哈哈bc哈哈bc
//忽略大小写i
var str = 'aAbcAba';
var newStr = str.replace(/a/gi,'哈哈')//"哈哈哈哈bc哈哈b哈哈"

사례 : 민감한 단어 필터링

<textarea name="" id="message"></textarea> <button>提交</button>
<div></div>
<script>
    var text = document.querySelector('textarea');
    var btn = document.querySelector('button');
    var div = document.querySelector('div');
    btn.onclick = function() {
    
    
    	div.innerHTML = text.value.replace(/激情|gay/g, '**');
    }
</script>


  1. a-z0-9_- ↩︎

추천

출처blog.csdn.net/weixin_48116269/article/details/108203636