문자열이 JS의 정규식과 일치하는지 확인하십시오.


750

jQuery와 함께 사용할 수있는 JavaScript를 사용하여 문자열이 정규식과 일치하는지 확인하기 위해 클라이언트 측 유효성 검사를 수행하려고합니다.

^([a-z0-9]{5,})$

이상적으로는 true 또는 false를 반환하는 식입니다.

저는 JavaScript 초보자인데 match()필요한 작업을 수행합니까? 문자열의 일부가 전체가 아닌 정규식과 일치하는지 확인하는 것 같습니다.


완전한 일치를 원하십니까, 아니면 문자열 에 일치하는 하위 문자열이 포함되어 있는지 여부
Kerrek SB

1
완전 일치-일치하는 하위 문자열이 아닙니다.
Richard

답변:


1194

regex.test()원하는 결과가 부울 결과 인 경우 사용하십시오 .

console.log(/^([a-z0-9]{5,})$/.test('abc1')); // false

console.log(/^([a-z0-9]{5,})$/.test('abc12')); // true

console.log(/^([a-z0-9]{5,})$/.test('abc123')); // true

... ()캡쳐 할 필요가 없으므로 정규 표현식에서를 제거 할 수 있습니다.


1
정규식의 초기 ^는 무엇을합니까?
PedroD

8
@PedroD ^ 시작 또는 시작으로 시작
Nagaraju

어떻게 반대를 하시겠습니까? "로 시작하지 않았다 ..."
PedroD


3
@stackdave 아마도 JavaScript가 아닌 Java로 작업하고 있습니까?
sfarbota

176

사용 test()방법 :

var term = "sample1";
var re = new RegExp("^([a-z0-9]{5,})$");
if (re.test(term)) {
    console.log("Valid");
} else {
    console.log("Invalid");
}

3
버전을 RegExp사용하면 변수 값을 정규식 문자열에 삽입 할 수 있습니다.
Christophe Roussy

2
new RegExp("^([a-z0-9]{5,})$")작동시키기 위해 큰 따옴표를 제거 해야했습니다
Facundo Colombier

98

당신은 또한 사용할 수 있습니다 match():

if (str.match(/^([a-z0-9]{5,})$/)) {
    alert("match!");
}

그러나 여기에서test() 읽을 수있는 것처럼 빠른 것 같습니다 .

사이의 중요한 차이점 match()test():

match()문자열에서만 작동하지만 test()정수에서도 작동합니다.

12345.match(/^([a-z0-9]{5,})$/); // ERROR
/^([a-z0-9]{5,})$/.test(12345);  // true
/^([a-z0-9]{5,})$/.test(null);   // false

// Better watch out for undefined values
/^([a-z0-9]{5,})$/.test(undefined); // true

숫자와 함께 작동하는 이유는 문자열을 기대할 때 매개 변수로 제공되기 때문에 숫자가 문자열로 강제 변환되기 때문입니다. 나는이 행동에 의존하지 않을 것이다. 환경의 test () 구현에 따라 다릅니다. 숫자에 match멤버 가 없기 때문에 일치하지 않습니다 . 정규식과 함께 숫자를 사용하려면 숫자를 문자열로 명시 적으로 변환하는 것이 좋습니다 ( String(123)예 :) .
Bronzdragon

일치는 여기에서 사용할 수 있지만 성능을 보면 test정규 표현식과 일치하도록 문자열의 유효성을 검사하고 하위 문자열을 추출하지 않을 때 성능이 30 % 향상됩니다.
Akansh

@pmrotule 예, 그러나 경기 설명 전에 언급해야합니다.
Akansh 2019

테스트와 일치 (및 matchAll)의 가장 큰 차이점은 일치는 일치하는 모든 하위 문자열 목록을 반환하는 것과 같지만 테스트는 존재하는 경우에만 검사한다는 것입니다. javascript.info/regexp-methods
Juan Lanus

50

/youregexp/.test(yourString)문자열이 정규 표현식과 일치하는지 여부 만 알고 싶은 경우 사용하십시오 .


8

다음은 특정 HTML 태그를 찾는 예입니다 /someregex/.test(). 부울 을 반환하는 것이 분명합니다 .

if(/(span|h[0-6]|li|a)/i.test("h3")) alert('true');

6
 let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 let regexp = /[a-d]/gi;
 console.log(str.match(regexp));

2

당신은 이것을 시도 할 수 있습니다, 그것은 나를 위해 작동합니다.

 <input type="text"  onchange="CheckValidAmount(this.value)" name="amount" required>

 <script type="text/javascript">
    function CheckValidAmount(amount) {          
       var a = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
       if(amount.match(a)){
           alert("matches");
       }else{
        alert("does not match"); 
       }
    }
</script>

1

이 꽃을보십시오 :

/^[a-z0-9\_\.\-]{2,20}\@[a-z0-9\_\-]{2,20}\.[a-z]{2,9}$/.test('abc@abc.abc');

진실


1

시험

 /^[a-z\d]{5,}$/.test(str)


2
이 코드 전용 답변은 페이지에 어떤 새로운 가치를 가져 옵니까?
mickmackusa 2016 년

현재는 (인해 정규 표현식으로 단순화) 최단 용액은
카밀 Kiełczewski

1
몇 년 전에 게시 된 패턴 중 1 개 문자를 제거했습니다. 하품.
mickmackusa 2016 년

2
이전 답변 아래에 댓글을 남겨서 0-9aaaaaaaaaaaaaaaaaaaa까지 줄이면됩니다 \d. 그리고 캡처 그룹이 필요하지 않습니다.
mickmackusa 2016 년

1

일치하는 항목이 없으면 유용한 객체를 반환하는 경우 null을 반환하는 execute 메서드를 사용하는 것이 좋습니다.

let case1 = /^([a-z0-9]{5,})$/.exec("abc1");
console.log(case1); //null

let case2 = /^([a-z0-9]{5,})$/.exec("pass3434");
console.log(case2); // ['pass3434', 'pass3434', index:0, input:'pass3434', groups: undefined]

0
const regExpStr = "^([a-z0-9]{5,})$"
const result = new RegExp(regExpStr, 'g').test("Your string") // here I have used 'g' which means global search
console.log(result) // true if it matched, false if it doesn't
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.