Bir dizenin JavaScript'te belirli bir karakter içerip içermediğini nasıl anlarım?


335

Bir kullanıcı bir 24 karakter (harf ve rakam, büyük / küçük harf duyarsız) kayıt kodu girmesi gerekiyordu bir metin kutusu ile bir sayfa var. Kullandığım maxlength24 karakter girmeden kullanıcı sınırlamak.

Kayıt kodları genellikle tire ile ayrılmış karakter grupları olarak verilir, ancak kullanıcının kodları tire olmadan girmesini istiyorum.

JavaScript kodumu jQuery olmadan, kullanıcının girdiği belirli bir dizenin tire içermediğini veya daha iyisi yalnızca alfasayısal karakterler içerdiğini kontrol etmek için nasıl yazabilirim?


2
Burada bulunan cevap stackoverflow.com/questions/3192612 , alfasayısal olarak nasıl doğrulanacağı hakkında bilgiye sahiptir.
JasCav

1
Ve düzenli ifadeleri öğrenmek için: regular-expressions.info
Felix Kling

Sizin için jquery millet gerekir ve kullanabilirsiniz inArray.
JonH

3
Girdinin nasıl biçimlendirildiği bir insanın sorunu değildir. Bilgisayarın sorunu bu. Kullanıcının girdiği her şeyi alın ve ait olmayan (alfa olmayan) tüm karakterleri kaldırın, sonucun 24 karakter uzunluğunda olduğunu test edin, sonra doğrulayın. Kullanıcının gerçekten biçimlendirilmiş girdiden nefret etmesi.
tggagne

Yanıtlar:


592

İçinde "merhaba" bulmak için your_string

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

Alfa sayısal için normal bir ifade kullanabilirsiniz:

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

Alfa Sayısal Düzenli İfade


Bu oldukça yardımcı oldu. Bir python programcı olarak konuşma, ben "in" anahtar kelime (ki bu alışılmışın dışında olabilir veya olmayabilir, emin değilim) yerine kullanıyorum ama sadece tek bir karakter daha çalışır.
trevorKirkby

1
Bunun cevaba nasıl oy verildiğini anlamıyorum. Birçok insanın Googling tarafından buraya geldiğini görebiliyorum. Daha iyi bir yol kesinlikle düzenli bir ifade kullanmak olacaktır.
Spock

25
Tek bir karakteri kontrol etmek için normal bir ifade mi kullanırsınız? Bu, yerleşik işlevle aynı şeyi elde etmek için aşırı miktarda ek yüktür. Normal ifadeyi anlamayan birçok insan var ve genellikle daha basit cevap en iyisidir.
kemiller2002

Ben giderdim /hello/g.test(your_string). İndexOf çalışırken, bence bir normal ifade testi ne yapmaya çalıştığınıza dair daha iyi bir hikaye anlatır. Bir dize içinde bir karakter dizisi bulmaya çalışıyorsam, dizin ilgisiz.
Joe Maffei


69

ES6 ile .includes ()

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

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

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

E: - yerine Tilde opperator kullanabilirsiniz IE tarafından suported Değil ~( Bit düzey DEĞİL birlikte) ) (.indexOf

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

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

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

Bir sayı ile kullanıldığında, etkili Tilde operatörü yapar ~N => -(N+1). Boolsdaki sayıları dönüştürmek için çift ​​negatif !!( Mantıksal DEĞİL ) ile kullanın:

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

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

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

Basit, okunabilir ve bir boole döndürür. Normal bir ifadeye ihtiyacınız olmadığında mükemmeldir.
bryanbraun

1
** Lütfen
içerme

52

Değişkende metin varsa foo:

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

Bu, kullanıcının en az bir karakter girdiğinden ve yalnızca alfasayısal karakterler girdiğinden emin olur .


Burada en iyi cevap, diğer tüm cevaplar benim pov boş.
chris_r


11

ES6 , includesString öğelerindeprototype dize başka bir dize içerip içermediğini kontrol etmek için kullanılabilen dahili bir yöntem ( ) içerir.

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

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

Bu yöntemi desteklenmeyen tarayıcılara eklemek için aşağıdaki çoklu dolgu kullanılabilir. ( Kaynak )

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

Bunu yapmak için normal bir ifade kullanın.

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

Bu tam olarak bir basamak olup olmadığını kontrol eder ve OP'nin istediği gibi tüm alfasayısal karakterleri kabul etmez.
cdhowie

@cdhowie .. + unuttum, ama ben de soruyu yanlış okudum .. işaret ettiğiniz için teşekkürler.
Gabriele Petrioli

6

Hepiniz çok fazla düşünüyorsunuz. Basit bir Düzenli İfade kullanın, en iyi arkadaşınız.

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 dakika içinde Regex öğrenin?


Bununla pratik bir şey yapmak için, bunu sadece bir seçimde çalıştırırsınız:if ( string1.test(regex) ) { alert("He likes pizza!"); }
Adam McArthur

Ve alfasayısal testiniz ...var regex = /^[a-z0-9]+$/i
Adam McArthur

4
Bu geriye dönük. Bkz. Developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/… regexObj.test (str)
Ralph Yozzo

Geri mi? regex.test(string1)
hlcs

Örnek yöntemleriniz geriye dönüktür. Olmalı regex.test(str). ( str.match(regex)benzerdir, ancak bir boole döndürmez.)
jsejcksn

6

Dizenin başında veya sonunda karakter arıyorsanız, ayrıca startsWithveendsWith

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

Yalnızca alfasayısal karakterleri test etmek için:

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

Normal ifade, (^) girişinin başından başlayıp ($) girişinin sonuna kadar durmak üzere, 0-9, AZ ve az karakter kümesinin 1 veya daha fazla (+) testini yapar.


4

Kevins cevabı doğru, ancak aşağıdaki gibi bir "sihirli" sayı gerektirir:

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

Bu durumda olduğunu bilmek gerekir -1 standları için bulunamadı . Biraz daha iyi bir sürüm olacağını düşünüyorum:

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

Eh göre orijinal , güncel ve taslak standartlar, indexOf()geri dönecek -1 dize bulunmazsa. Bu yüzden 0 kullanmaktan daha fazla sihir yok .
Tüm İşçiler

3

Bunu dene:

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'!");

İşte bir örnek: http://jsfiddle.net/oliverni/cb8xw/


3

Dize'nin arama işlevi de yararlıdır. Belirli bir dizede bir karakter ve bir alt_dizesi arar.

'apple'.search('pl') İadeler 2

'apple'.search('x') dönüş -1


2

Örneğin, DOM'den ap veya h1 etiketi gibi verileri okuyorsanız, iki yerel JavaScript işlevi kullanmak istersiniz, en azından sağlayacağım çözüm için sessizdir, ancak es6 ile sınırlıdır. DOM içindeki tüm p etiketlerini arayacağım, metin "T" içeriyorsa paragrafın tamamı kaldırılacaktır. Umarım bu küçük örnek birisine yardım eder!

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

Mükemmel çalışıyor.Bu örnek çok yardımcı olacaktır.

<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

Demonstration: include () yöntemi tüm dizede “içerir” karakterini bulur, bir true değerini döndürür.

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

str.includes("contains");

//The output of this

  true


0

Dizenin alfasayısal veya alfasayısal + izin verilen bazı karakterleri kontrol edin

En hızlı alfasayısal yöntem şu şekilde belirtilir: Javascript'te alfasayısal kontrolün en iyi yolu Doğrudan sayı aralıklarında çalıştığı için .

Sonra, birkaç ekstra karaktere daha güvenli bir şekilde izin vermek için onları birSet hızlı arama için.

Bu uygulamanın vekil çiftlerle doğru bir şekilde ilgileneceğine inanıyorum .

#!/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('你好'));

Yukarı Git .

Node.js v10.15.1'de test edilmiştir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.