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

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

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.