JavaScript에서 문자열에 특정 문자가 포함되어 있는지 확인하는 방법은 무엇입니까?


334

사용자가 24 자 (문자 및 숫자, 대소 문자를 구분하지 않음) 등록 코드를 입력 해야하는 텍스트 상자가있는 페이지가 있습니다. 나는 maxlength사용자가 24자를 입력하도록 제한했다.

등록 코드는 일반적으로 대시로 구분 된 문자 그룹으로 제공되지만 사용자가 대시없이 코드를 입력하고 싶습니다.

jQuery없이 JavaScript 코드를 작성하여 사용자가 입력 한 주어진 문자열에 대시가 없거나 더 나은 영숫자 문자 만 포함되어 있는지 확인하려면 어떻게해야합니까?


2
여기에있는 답변은 stackoverflow.com/questions/3192612 에 영숫자를 확인하는 방법에 대한 정보가 있습니다.
— JasCav

1
그리고 정규 표현식을 배우려면 regular-expressions.info
— Felix Kling

jquery 사람들을 위해 당신은 사용해야하고 사용할 수 있습니다 inArray.
— JonH

3
입력 형식은 인간의 문제가 아닙니다. 컴퓨터의 문제입니다. 사용자가 입력 한 내용을 모두 가져 와서 알파가 아닌 문자를 모두 제거하고 결과가 24 자인지 확인한 다음 유효성을 검사하십시오. 사용자는 실제로 형식화 된 입력을 싫어합니다.
— tggagne

답변:


591

에서 "hello"를 찾으려면 your_string

if (your_string.indexOf('hello') > -1)
{
  alert("hello found inside your_string");
}

알파 숫자의 경우 정규식을 사용할 수 있습니다.

http://www.regular-expressions.info/javascript.html

알파벳 숫자 정규식


매우 도움이되었습니다. 파이썬 프로그래머라고 말하면, 나는 "in"키워드를 대체하기 위해 이것을 사용하고 있습니다 (정통적이지 않을 수도 있지만 확실하지 않습니다). 단일 문자 이상에서 작동합니다.
— trevorKirkby

1
나는 이것이 답변에서 어떻게 투표되었는지 이해하지 못합니다. 인터넷 검색을 통해 많은 사람들이 여기에 온 것을 볼 수 있습니다. 더 좋은 방법은 정규 표현식을 사용하는 것입니다.
— Spock

25
정규식을 사용하여 단일 문자를 확인 하시겠습니까? 내장 함수와 똑같은 작업을 수행하기에는 과도한 오버 헤드가 있습니다. 정규 표현식을 이해하지 못하는 사람들이 많이 있으며 일반적으로 간단한 답변이 가장 좋습니다.
— kemiller2002

나는 갈 것이다 /hello/g.test(your_string). indexOf가 작동하는 동안 정규 표현식 테스트를 통해 달성하려는 결과를 더 잘 알 수 있다고 생각합니다. 문자열 내에서 일련의 문자를 찾으려고하면 색인이 관련이 없습니다.
— Joe Maffei


69

ES6 .includes () 포함

"FooBar".includes("oo"); // true

"FooBar".includes("foo"); // false

"FooBar".includes("oo", 2); // false

E는 - 대신 당신이 물결표의 opperator 사용할 수 있습니다 IE에 의해 suported하지 않음 ~( 비트 단위 NOT 포함) ) (.indexOf를

~"FooBar".indexOf("oo"); // -2 -> true

~"FooBar".indexOf("foo"); // 0 -> false

~"FooBar".indexOf("oo", 2); // 0 -> false

Tilde 연산자는 숫자와 함께 사용하여 유효 ~N => -(N+1)합니다. 부울로 숫자를 변환하려면 이중 부정 !!( Logical NOT ) 과 함께 사용하십시오 .

!!~"FooBar".indexOf("oo"); // true

!!~"FooBar".indexOf("foo"); // false

!!~"FooBar".indexOf("oo", 2); // false

간단하고 읽을 수 있으며 부울을 반환합니다. 정규식이 필요하지 않은 경우에 적합합니다.
— bryanbraun

1
** 포함 방법은 IE에서 지원하지 않습니다. **
— Bonez024

52

변수에 텍스트가있는 경우 foo:

if (! /^[a-zA-Z0-9]+$/.test(foo)) {
    // Validation failed
}

이렇게하면 사용자가 하나 이상의 문자를 입력 하고 영숫자 문자 만 입력했는지 테스트하고 확인합니다 .


가장 좋은 대답은 다른 모든 대답은 내 POV에서 null입니다.
— chris_r


11

ES6 에는 includesString 's에 내장 메소드 ( )가 prototype포함되어 있으며, string에 다른 문자열이 포함되어 있는지 여부를 확인하는 데 사용할 수 있습니다.

var str = 'To be, or not to be, that is the question.';

console.log(str.includes('To be')); 

지원되지 않는 브라우저에서 다음 방법을 사용하여이 방법을 추가 할 수 있습니다. ( 소스 )

if (!String.prototype.includes) {
  String.prototype.includes = function(search, start) {
    'use strict';
    if (typeof start !== 'number') {
      start = 0;
    }
    
    if (start + search.length > this.length) {
      return false;
    } else {
      return this.indexOf(search, start) !== -1;
    }
  };
}


7

이를 위해서는 정규식을 사용하십시오.

function isAlphanumeric( str ) {
 return /^[0-9a-zA-Z]+$/.test(str);
}

이것은 정확히 한 자리 숫자를 확인 하고 OP가 원하는대로 모든 영숫자를 허용하지 않습니다.
— cdhowie

@ cdhowie .. +를 잊어 버렸지 만 질문을 잘못 읽었습니다. 지적 해 주셔서 감사합니다.
— Gabriele Petrioli

6

당신은 모두 너무 열심히 생각하고 있습니다. 간단한 정규식 만 사용하면 가장 친한 친구입니다.

var string1 = "Hi Stack Overflow. I like to eat pizza."
var string2 = "Damn, I fail."

var regex = /(pizza)/g // Insert whatever phrase or character you want to find

string1.test(regex); // => true
string2.test(regex); // => false

5 분 안에 정규식을 배우십니까?


따라서 이것으로 실용적인 것을하기 위해, 당신은 그것을 간단히 선택해서 실행할 것입니다 :if ( string1.test(regex) ) { alert("He likes pizza!"); }
— Adam McArthur

그리고 당신의 영숫자 테스트는 ...var regex = /^[a-z0-9]+$/i
— Adam McArthur

4
이것은 거꾸로입니다. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 참조 regexObj.test (str)
— Ralph Yozzo

거꾸로? regex.test(string1)
— hlcs

예제 메소드는 거꾸로 있습니다. 이어야합니다 regex.test(str). ( str.match(regex)유사하지만 부울을 반환하지 않습니다.)
— jsejcksn

6

문자열의 시작 또는 끝에서 문자를 검색하는 경우 startsWith및endsWith

const country = "pakistan";
country.startsWith('p'); // true
country.endsWith('n');  // true

5

var inputString = "this is home";
var findme = "home";

if ( inputString.indexOf(findme) > -1 ) {
    alert( "found it" );
} else {
    alert( "not found" );
}


4

영숫자 문자 만 테스트하려면 다음을 수행하십시오.

if (/^[0-9A-Za-z]+$/.test(yourString))
{
    //there are only alphanumeric characters
}
else
{
    //it contains other characters
}

정규식은 입력의 시작 (^)에서 시작하여 입력의 끝 ($)에서 중지하는 0-9, AZ 및 az 문자 세트 중 하나 이상 (+)을 테스트합니다.


4

Kevins의 답변은 정확하지만 다음과 같이 "매직"번호가 필요합니다.

var containsChar = s.indexOf(somechar) !== -1;

이 경우 -1 은 찾을 수 없음을 나타 냅니다. 조금 더 나은 버전은 다음과 같습니다.

var containsChar = s.indexOf(somechar) >= 0;

그럼에 따라 원래 , 현재 , 그리고 초안 표준, indexOf()반환 -1 문자열이 발견되지 않는 경우. 따라서 0을 사용하는 것 보다 마술 이 아닙니다 .
— 모든 근로자가 필수적

3

이 시도:

if ('Hello, World!'.indexOf('orl') !== -1)
    alert("The string 'Hello World' contains the substring 'orl'!");
else
    alert("The string 'Hello World' does not contain the substring 'orl'!");

예를 들면 다음과 같습니다. http://jsfiddle.net/oliverni/cb8xw/


3

문자열의 검색 기능도 유용합니다. 주어진 문자열에서 문자와 sub_string을 검색합니다.

'apple'.search('pl') 보고 2

'apple'.search('x') 반환 -1


2

예를 들어 ap 또는 h1 태그와 같은 DOM에서 데이터를 읽는 경우 두 가지 기본 JavaScript 함수를 사용하려는 경우 조용히 쉽지만 적어도 제공하려는 솔루션에 대해서는 es6로 제한됩니다. 텍스트에 "T"가 포함 된 경우 DOM 내에서 모든 p 태그를 검색합니다. 전체 단락이 제거됩니다. 이 작은 예가 누군가를 돕기를 바랍니다!

HTML

<p>Text you need to read one</p>
<p>Text you need to read two</p>
<p>Text you need to read three</p>

JS

let paras = document.querySelectorAll('p');

paras.forEach(p => {
  if(p.textContent.includes('T')){
       p.remove();
    } 
});

1

완벽하게 작동합니다.이 훌륭한 것은 많은 도움이 될 것입니다.

<script>    
    function check()
    {
       var val = frm1.uname.value;
       //alert(val);
       if (val.indexOf("@") > 0)
       {
          alert ("email");
          document.getElementById('isEmail1').value = true;
          //alert( document.getElementById('isEmail1').value);
       }else {
          alert("usernam");
          document.getElementById('isEmail1').value = false;
          //alert( document.getElementById('isEmail1').value);
       }
    }
</script>

<body>
    <h1>My form </h1>
    <form action="v1.0/user/login" method="post" id = "frm1">
        <p>
            UserName : <input type="text" id = "uname" name="username" />
        </p>
        <p>
            Password : <input type="text" name="password" />
        </p>
        <p>
            <input type="hidden" class="email" id = "isEmail1" name = "isEmail"/>
        </p>
        <input type="submit" id = "submit" value="Add User" onclick="return check();"/>
    </form>
</body>

0

데모 : include () 메서드는 전체 문자열에서 "contains"문자를 찾으면 true를 반환합니다.

var string = "This is a tutsmake.com and this tutorial contains javascript include() method examples."

str.includes("contains");

//The output of this

  true


0

문자열이 영숫자인지 영숫자인지 + 허용되는 문자인지 확인하십시오.

가장 빠른 영숫자 방법은 다음과 같이 언급 될 수 있습니다. Javascript 가 숫자 범위에서 직접 작동하므로 영숫자 확인하는 가장 좋은 방법 입니다.

그런 다음 몇 가지 추가 문자를 이상하게 허용 하기Set 위해 빠른 조회를 위해 문자를 넣을 수 있습니다 .

이 구현은 대리 쌍을 올바르게 처리한다고 생각 합니다.

#!/usr/bin/env node

const assert = require('assert');

const char_is_alphanumeric = function(c) {
  let code = c.codePointAt(0);
  return (
    // 0-9
    (code > 47 && code < 58) ||
    // A-Z
    (code > 64 && code < 91) ||
    // a-z
    (code > 96 && code < 123)
  )
}

const is_alphanumeric = function (str) {
  for (let c of str) {
    if (!char_is_alphanumeric(c)) {
      return false;
    }
  }
  return true;
};

// Arbitrarily defined as alphanumeric or '-' or '_'.
const is_almost_alphanumeric = function (str) {
  for (let c of str) {
    if (
      !char_is_alphanumeric(c) &&
      !is_almost_alphanumeric.almost_chars.has(c)
    ) {
      return false;
    }
  }
  return true;
};
is_almost_alphanumeric.almost_chars = new Set(['-', '_']);

assert( is_alphanumeric('aB0'));
assert(!is_alphanumeric('aB0_-'));
assert(!is_alphanumeric('aB0_-*'));
assert(!is_alphanumeric('你好'));

assert( is_almost_alphanumeric('aB0'));
assert( is_almost_alphanumeric('aB0_-'));
assert(!is_almost_alphanumeric('aB0_-*'));
assert(!is_almost_alphanumeric('你好'));

GitHub 업스트림 .

Node.js v10.15.1에서 테스트되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.