จะทราบได้อย่างไรว่าสตริงมีอักขระบางตัวใน JavaScript


334

ฉันมีหน้าเว็บพร้อมกล่องข้อความซึ่งผู้ใช้ควรป้อนรหัสลงทะเบียน 24 ตัวอักษร (ตัวอักษรและตัวเลขตัวพิมพ์เล็กและใหญ่) ฉันใช้maxlengthเพื่อ จำกัด ผู้ใช้ในการป้อน 24 อักขระ

โดยทั่วไปรหัสการลงทะเบียนจะได้รับเป็นกลุ่มของอักขระที่คั่นด้วยเครื่องหมายขีดกลาง แต่ฉันต้องการให้ผู้ใช้ป้อนรหัสโดยไม่ต้องมีเครื่องหมายขีดกลาง

ฉันจะเขียนโค้ด JavaScript โดยไม่มี jQuery เพื่อตรวจสอบว่าสตริงที่กำหนดซึ่งอินพุตของผู้ใช้ไม่มีเครื่องหมายขีดคั่นหรือดีกว่ามีเพียงตัวอักษรและตัวเลขเท่านั้น


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
ฉันไม่เข้าใจว่าคำตอบนี้ถูกโหวตอย่างไร ฉันเห็นได้ว่ามีผู้คนมากมายมาที่นี่โดย Googling วิธีที่ดีกว่าคือการใช้นิพจน์ทั่วไป
สป็อค

25
คุณจะใช้การแสดงออกปกติเพื่อตรวจสอบตัวละครเดียว? นั่นเป็นค่าใช้จ่ายจำนวนมากเกินไปที่จะได้รับสิ่งเดียวกันกับที่ตัวเครื่องทำงาน มีคนจำนวนมากที่ไม่เข้าใจ regex และโดยทั่วไปคำตอบที่ง่ายกว่าก็คือคำตอบที่ดีที่สุด
kemiller2002

/hello/g.test(your_string)ฉันจะไปกับ ในขณะที่ indexOf ใช้งานได้ฉันคิดว่าการทดสอบ regex บอกเล่าเรื่องราวที่ดีขึ้นเกี่ยวกับสิ่งที่คุณพยายามทำ หากฉันพยายามหาลำดับของอักขระภายในสตริงดัชนีจะไม่เกี่ยวข้อง
Joe Maffei


69

ด้วย ES6. รวมถึง()

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

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

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

E: ไม่ใช่ suported โดย IE - คุณสามารถใช้ Tilde opperator ~( Bitwise NOT ) กับ. indexOf ()

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

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

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

~N => -(N+1)มือสองที่มีจำนวนผู้ประกอบการที่มีประสิทธิภาพไม่หนอน ใช้กับการปฏิเสธคู่!!( Logical NOT ) เพื่อแปลงตัวเลขเป็น bools:

!!~"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 ของฉัน
chris_r


11

ES6มีวิธีการ inbuilt ( includes) ใน String's prototypeซึ่งสามารถใช้เพื่อตรวจสอบว่าสตริงมีสตริงอื่นหรือไม่

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

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

polyfill ต่อไปนี้สามารถใช้เพื่อเพิ่มวิธีนี้ในเบราว์เซอร์ที่ไม่รองรับ ( ที่มา )

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

การทำเช่นนี้จะตรวจสอบตัวเลขหนึ่งหลักและจะไม่ยอมรับตัวอักษรและตัวเลขทั้งหมดตามที่ต้องการ
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

เรียนรู้ Regex ใน 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


4

วิธีทดสอบสำหรับตัวอักษรและตัวเลขเท่านั้น:

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

regex กำลังทดสอบ 1 ชุดขึ้นไป (+) ของชุดอักขระ 0-9, AZ และ az เริ่มต้นด้วยจุดเริ่มต้นของอินพุต (^) และหยุดด้วยจุดสิ้นสุดของอินพุต ($)


4

คำตอบของ Kevins นั้นถูกต้อง แต่ต้องใช้หมายเลข "เวทย์มนตร์" ดังนี้

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

ในกรณีที่คุณจำเป็นต้องรู้ว่า-1หมายถึงไม่พบ ฉันคิดว่ารุ่นที่ดีขึ้นจะเป็น:

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

ดีตามเดิม , ปัจจุบันและร่างมาตรฐานindexOf()จะกลับ-1ถ้าสตริงไม่พบ ดังนั้นจึงแทบจะไม่มากขึ้นวิเศษกว่าการใช้0
คนงานทุกคนมีความจำเป็น


3

ฟังก์ชันการค้นหาของ String มีประโยชน์เช่นกัน มันค้นหาตัวละครเช่นเดียวกับ sub_string ในสตริงที่กำหนด

'apple'.search('pl') ผลตอบแทน 2

'apple'.search('x') กลับ -1


2

หากคุณกำลังอ่านข้อมูลจาก DOM เช่น ap หรือ h1 tag คุณจะต้องใช้ฟังก์ชัน JavaScript ดั้งเดิมสองฟังก์ชันมันเงียบง่าย แต่ จำกัด เพียง es6 อย่างน้อยสำหรับวิธีแก้ปัญหาที่ฉันจะให้ ฉันจะค้นหาแท็ก p ทั้งหมดใน DOM หากข้อความมี "T" ทั้งย่อหน้าจะถูกลบออก ฉันหวังว่าตัวอย่างเล็ก ๆ นี้จะช่วยให้ใครบางคนออกไป!

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

การสาธิต: วิธีการรวม () ค้นหาอักขระ“ บรรจุ” ในสตริงทั้งหมดมันจะคืนค่าจริง

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.