Làm thế nào để biết một chuỗi có chứa một ký tự nào đó trong JavaScript không?


333

Tôi có một trang với một hộp văn bản nơi người dùng có nghĩa vụ nhập mã đăng ký gồm 24 ký tự (chữ cái và số, không phân biệt chữ hoa chữ thường). Tôi đã sử dụng maxlengthđể giới hạn người dùng nhập 24 ký tự.

Mã đăng ký thường được đưa ra dưới dạng các nhóm ký tự được phân tách bằng dấu gạch ngang, nhưng tôi muốn người dùng nhập mã mà không có dấu gạch ngang.

Làm cách nào tôi có thể viết mã JavaScript của mình mà không cần jQuery để kiểm tra xem một chuỗi đã cho mà người dùng nhập vào không chứa dấu gạch ngang hay tốt hơn là chỉ chứa các ký tự chữ và số?


2
Câu trả lời được tìm thấy ở đây stackoverflow.com/questions/3192612 có thông tin về cách xác thực trên chữ và số.
JasCav

1
Và để tìm hiểu các biểu thức chính quy: normal-expressions.info
Felix Kling

Đối với bạn jquery folks bạn nên và có thể sử dụng inArray.
JonH

3
Làm thế nào đầu vào được định dạng không phải là vấn đề của con người. Đó là vấn đề của máy tính. Lấy bất cứ thứ gì người dùng nhập và xóa tất cả các ký tự không thuộc (không phải alpha), kiểm tra để xem kết quả dài 24 ký tự, sau đó xác thực nó. Người dùng thực sự ghét định dạng đầu vào.
tggagne

Câu trả lời:


589

Để tìm "xin chào" trong your_string

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

Đối với số alpha, bạn có thể sử dụng biểu thức chính quy:

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

Biểu thức chính quy số Alpha


Điều đó khá hữu ích. Nói như một lập trình viên trăn, tôi đang sử dụng từ đó để thay thế từ khóa "trong" (có thể không chính xác, tôi không chắc chắn) nhưng nó hoạt động không chỉ là một ký tự.
trevorKirkby

1
Tôi không hiểu làm thế nào điều này đã được bình chọn tại câu trả lời. Tôi có thể thấy rằng rất nhiều người đến đây bởi Googling. Một cách tốt hơn chắc chắn sẽ được sử dụng một biểu thức thông thường.
Spock

25
Bạn sẽ sử dụng một biểu thức thông thường để kiểm tra một ký tự? Đó là quá nhiều chi phí để có được chính xác điều tương tự mà hàm tích hợp thực hiện. Có rất nhiều người không hiểu regex và nói chung, câu trả lời đơn giản hơn là tốt nhất.
kemiller2002

Tôi sẽ đi với /hello/g.test(your_string). Trong khi indexOf hoạt động, tôi nghĩ một bài kiểm tra regex kể một câu chuyện hay hơn về những gì bạn đang cố gắng thực hiện. Nếu tôi đang cố gắng tìm một chuỗi các ký tự bên trong một chuỗi, thì chỉ mục đó không liên quan.
Joe Maffei


69

Với ES6 .inceses ()

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

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

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

E: Không được hỗ trợ bởi IE - thay vào đó, bạn có thể sử dụng công cụ khai thác Tilde ~( Bitwise KHÔNG ) với .indexOf ()

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

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

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

Được sử dụng với một số, toán tử Tilde có hiệu quả ~N => -(N+1). Sử dụng nó với phủ định kép !!( KHÔNG logic ) để chuyển đổi các số trong bools:

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

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

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

Đơn giản, dễ đọc và trả về một boolean. Hoàn hảo khi bạn không cần một biểu thức thông thường.
bryanbraun

1
** Xin lưu ý rằng phương thức bao gồm không được IE hỗ trợ **
Bonez024

52

Nếu bạn có văn bản trong biến foo:

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

Điều này sẽ kiểm tra và đảm bảo người dùng đã nhập ít nhất một ký tự và chỉ nhập các ký tự chữ và số.


Câu trả lời tốt nhất ở đây, tất cả các câu trả lời khác là null từ POV của tôi.
chris_r


10

ES6 chứa phương thức inbuilt ( includes) trong String's prototype, có thể được sử dụng để kiểm tra xem chuỗi có chứa chuỗi khác hay không.

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

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

Theo sau polyfill có thể được sử dụng để thêm phương thức này trong các trình duyệt không được hỗ trợ. ( Nguồn )

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

Sử dụng một biểu thức thường xuyên để thực hiện điều này.

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

Điều này sẽ kiểm tra chính xác một chữ số và sẽ không chấp nhận tất cả các ký tự chữ và số, như OP mong muốn.
cdhowie

@cdhowie .. quên một +, nhưng tôi cũng đã đọc sai câu hỏi .. cảm ơn vì đã chỉ ra.
Gabriele Petrioli

6

Tất cả các bạn đang suy nghĩ quá nhiều. Chỉ cần sử dụng Biểu thức chính quy đơn giản, đó là người bạn tốt nhất của bạn.

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

Học Regex sau 5 phút?


Vì vậy, để làm điều gì đó thiết thực với điều này, bạn chỉ cần chạy nó trong một lựa chọn:if ( string1.test(regex) ) { alert("He likes pizza!"); }
Adam McArthur

Và bài kiểm tra chữ và số của bạn sẽ là ...var regex = /^[a-z0-9]+$/i
Adam McArthur

4
Điều này là ngược. Xem developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ cho regexObj.test (str)
Ralph Yozzo

Nó ngược? regex.test(string1)
hlcs

Phương pháp ví dụ của bạn là ngược. Nó phải regex.test(str). ( str.match(regex)tương tự, nhưng không trả lại boolean.)
jsejcksn

6

Nếu bạn đang tìm kiếm (các) ký tự ở đầu hoặc cuối chuỗi, bạn cũng có thể sử dụng 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

Để chỉ kiểm tra các ký tự chữ và số:

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

Regex đang kiểm tra 1 hoặc nhiều hơn (+) bộ ký tự 0-9, AZ và az, bắt đầu bằng đầu bắt đầu (^) và dừng khi kết thúc đầu vào ($).


4

Câu trả lời của Kevins là đúng nhưng nó yêu cầu số "ma thuật" như sau:

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

Trong trường hợp đó, bạn cần biết rằng -1 là viết tắt của không tìm thấy . Tôi nghĩ rằng một phiên bản tốt hơn sẽ là:

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

Theo tiêu chuẩn ban đầu , hiện tạidự thảo , indexOf()sẽ trả về -1 nếu không tìm thấy chuỗi. Vì vậy, nó hầu như không nhiều phép thuật hơn là sử dụng 0 .
Tất cả công nhân là điều cần thiết

3

Thử cái này:

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

Dưới đây là một ví dụ: http://jsfiddle.net/oliverni/cb8xw/


3

Hàm tìm kiếm của chuỗi cũng hữu ích. Nó tìm kiếm một ký tự cũng như một chuỗi con trong một chuỗi đã cho.

'apple'.search('pl') trả lại 2

'apple'.search('x') trở về -1


2

Ví dụ, nếu bạn đang đọc dữ liệu từ DOM, chẳng hạn như thẻ ap hoặc h1, bạn sẽ muốn sử dụng hai hàm JavaScript nguyên gốc, việc này khá dễ dàng nhưng bị giới hạn ở es6, ít nhất là đối với giải pháp tôi sẽ cung cấp. Tôi sẽ tìm kiếm tất cả các thẻ p trong DOM, nếu văn bản chứa "T" thì toàn bộ đoạn sẽ bị xóa. Tôi hy vọng ví dụ nhỏ này sẽ giúp được ai đó!

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>

Mã não

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

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

1

Làm việc hoàn hảo. Exmple này sẽ giúp rất nhiều.

<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

Trình diễn: Phương thức include () tìm thấy ký tự chứa chứa trong toàn bộ chuỗi, nó sẽ trả về một giá trị đúng.

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

str.includes("contains");

//The output of this

  true


0

Kiểm tra xem chuỗi là chữ và số hay chữ số + một số ký tự được phép

Phương pháp chữ và số nhanh nhất có thể được đề cập tại: Cách tốt nhất để kiểm tra chữ và số trong Javascript vì nó hoạt động trực tiếp trên phạm vi số.

Sau đó, để cho phép một vài ký tự bổ sung khác hoàn toàn, chúng ta có thể đặt chúng vàoSet để tra cứu nhanh.

Tôi tin rằng việc thực hiện này sẽ giải quyết các cặp thay thế một cách chính xác.

#!/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 ngược dòng .

Đã thử nghiệm trong Node.js v10.15.1.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.