Bagaimana cara mengetahui apakah string berisi karakter tertentu dalam JavaScript?

335

Saya memiliki halaman dengan kotak teks di mana pengguna seharusnya memasukkan kode registrasi 24 karakter (huruf dan angka, tidak sensitif huruf besar-kecil). Saya dulu maxlengthmembatasi pengguna untuk memasukkan 24 karakter.

Kode registrasi biasanya diberikan sebagai kelompok karakter yang dipisahkan oleh tanda hubung, tetapi saya ingin agar pengguna memasukkan kode tanpa tanda hubung.

Bagaimana saya bisa menulis kode JavaScript saya tanpa jQuery untuk memeriksa bahwa string yang diberikan input pengguna tidak mengandung tanda hubung, atau lebih baik lagi, hanya berisi karakter alfanumerik?

Sungai Vivian
sumber
2
Jawaban yang ditemukan di sini stackoverflow.com/questions/3192612 memiliki informasi tentang cara memvalidasi alfanumerik.
JasCav
1
Dan untuk mempelajari ekspresi reguler: regular-expressions.info
Felix Kling
Bagi Anda orang-orang jquery, Anda harus dan dapat menggunakannya inArray.
JonH
3
Bagaimana input diformat bukan masalah manusia. Ini masalah komputer. Ambil apa pun yang dimasukkan pengguna dan hapus semua karakter yang bukan milik (non-alfa), uji untuk melihat hasilnya sepanjang 24 karakter, lalu validasi. Input yang diformat pengguna benar-benar benci.
tggagne

Jawaban:

592

Untuk menemukan "halo" di your_string

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

Untuk alfa numerik Anda dapat menggunakan ekspresi reguler:

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

Ekspresi Reguler Numerik Alpha

kemiller2002
sumber
Itu cukup membantu. Berbicara sebagai programmer python, saya menggunakannya untuk mengganti kata kunci "in" (yang mungkin atau mungkin tidak ortodoks, saya tidak yakin) tetapi berfungsi lebih dari hanya satu karakter.
trevorKirkby
1
Saya tidak mengerti bagaimana ini dipilih pada jawaban. Saya dapat melihat bahwa banyak orang datang ke sini dengan Googling. Cara yang lebih baik pasti akan menggunakan ekspresi reguler.
Spock
25
Anda akan menggunakan ekspresi reguler untuk memeriksa satu karakter? Itu adalah jumlah overhead yang berlebihan untuk mendapatkan hal yang sama persis dengan fungsi bawaan. Ada banyak orang yang tidak mengerti regex, dan umumnya jawaban yang lebih sederhana adalah yang terbaik.
kemiller2002
Saya akan pergi dengan /hello/g.test(your_string). Sementara indexOf bekerja, saya pikir tes regex menceritakan kisah yang lebih baik tentang apa yang ingin Anda capai Jika saya mencoba menemukan urutan karakter di dalam string, indeksnya tidak relevan.
Joe Maffei
69

Dengan ES6. Termasuk ()

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

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

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

E: Tidak didukung oleh IE - sebagai gantinya Anda dapat menggunakan Tilde opperator ~( Bitwise NOT ) dengan .indexOf ()

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

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

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

Digunakan dengan angka, operator Tilde efektif ~N => -(N+1). Gunakan dengan negasi ganda !!( TIDAK logis ) untuk mengonversi angka dalam bools:

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

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

!!~"FooBar".indexOf("oo", 2); // false
Libor julian
sumber
Sederhana, mudah dibaca, dan mengembalikan boolean. Sempurna untuk saat Anda tidak memerlukan ekspresi reguler.
bryanbraun
1
** Harap dicatat bahwa metode yang disertakan tidak didukung oleh IE **
Bonez024
52

Jika Anda memiliki teks dalam variabel foo:

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

Ini akan menguji dan memastikan pengguna telah memasukkan setidaknya satu karakter, dan hanya memasukkan karakter alfanumerik.

cdhowie
sumber
Jawaban terbaik di sini, semua jawaban lain adalah nol dari pov saya.
chris_r
19

periksa apakah string (kata / kalimat ...) berisi kata / karakter tertentu

if ( "write something here".indexOf("write som") > -1 )  { alert( "found it" );  } 
T.Todua
sumber
Apakah ini berfungsi pada IE? -> stackoverflow.com/questions/3480771/…
Ger Soto
11

ES6 berisi metode inbuilt ( includes) di String prototype, yang dapat digunakan untuk memeriksa apakah string berisi string lain atau tidak.

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

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

Polyfill berikut dapat digunakan untuk menambahkan metode ini di browser yang tidak didukung. ( Sumber )

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;
    }
  };
}

Vipin Kumar
sumber
7

Gunakan ekspresi reguler untuk mencapai ini.

function isAlphanumeric( str ) {
 return /^[0-9a-zA-Z]+$/.test(str);
}
Gabriele Petrioli
sumber
Ini akan memeriksa dengan tepat satu digit, dan tidak akan menerima semua karakter alfanumerik, seperti yang diinginkan OP.
cdhowie
@cdhowie .. lupa tanda +, tapi saya juga salah baca pertanyaannya .. terima kasih sudah menunjukkan.
Gabriele Petrioli
6

Anda semua berpikir terlalu keras. Cukup gunakan Ekspresi Reguler sederhana, itu adalah teman terbaik Anda.

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

Pelajari Regex dalam 5 menit?

Adam McArthur
sumber
Jadi untuk melakukan sesuatu yang praktis dengan ini, Anda cukup menjalankannya dalam pilihan:if ( string1.test(regex) ) { alert("He likes pizza!"); }
Adam McArthur
Dan tes alfanumerik Anda akan ...var regex = /^[a-z0-9]+$/i
Adam McArthur
4
Ini mundur. Lihat developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… regexObj.test (str)
Ralph Yozzo
Mundur? regex.test(string1)
hlcs
Metode contoh Anda mundur. Seharusnya begitu regex.test(str). ( str.match(regex)serupa, tetapi tidak mengembalikan boolean.)
jsejcksn
6

Jika Anda mencari karakter di awal atau di akhir string, Anda juga dapat menggunakan startsWithdanendsWith

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

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

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

Aman Maurya
sumber
4

Untuk menguji hanya karakter alfanumerik:

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

Regex sedang menguji untuk 1 atau lebih (+) dari himpunan karakter 0-9, AZ, dan az, dimulai dengan awal input (^) dan berhenti dengan akhir input ($).

Fairfieldt
sumber
4

Jawaban Kevin benar tetapi membutuhkan angka "ajaib" sebagai berikut:

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

Dalam hal ini Anda perlu tahu bahwa -1 berarti tidak ditemukan . Saya pikir versi yang sedikit lebih baik adalah:

var containsChar = s.indexOf(somechar) >= 0;
Mika Karjunen
sumber
Nah menurut standar asli , saat ini , dan konsep , indexOf()akan mengembalikan -1 jika string tidak ditemukan. Jadi itu hampir tidak lebih ajaib daripada menggunakan 0 .
Semua Pekerja Sangat Penting
3

Coba ini:

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

Berikut ini sebuah contoh: http://jsfiddle.net/oliverni/cb8xw/

Oliver Ni
sumber
3

Fungsi pencarian string juga berguna. Itu mencari karakter serta sub_string dalam string yang diberikan.

'apple'.search('pl') kembali 2

'apple'.search('x') kembali -1

pelajar010
sumber
2

Jika Anda membaca data dari DOM seperti ap atau tag h1, misalnya, Anda ingin menggunakan dua fungsi JavaScript asli, itu mudah, tenang tetapi terbatas pada es6, setidaknya untuk solusi yang akan saya berikan. Saya akan mencari semua tag p dalam DOM, jika teks berisi "T" seluruh paragraf akan dihapus. Saya harap contoh kecil ini membantu seseorang!

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();
    } 
});
Der Deutsche
sumber
1

Bekerja dengan sempurna. Contoh ini akan sangat membantu.

<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>
MankitaP
sumber
0

Demonstrasi: Metode include () menemukan karakter "berisi" di seluruh string, itu akan mengembalikan true.

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

str.includes("contains");

//The output of this

  true

Pengembang
sumber
0

Periksa apakah string alfanumerik atau alfanumerik + beberapa karakter yang diizinkan

Metode alfanumerik tercepat mungkin seperti yang disebutkan di: Cara terbaik untuk memeriksa alfanumerik dalam Javascript karena beroperasi pada rentang angka secara langsung.

Kemudian, untuk memungkinkan beberapa karakter tambahan lain secara masuk akal kita bisa menempatkan mereka dalamSet untuk pencarian cepat.

Saya percaya bahwa implementasi ini akan menangani pasangan pengganti dengan benar.

#!/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 hulu .

Diuji dalam Node.js v10.15.1.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
sumber