Как определить, содержит ли строка определенный символ в JavaScript? - PullRequest
280 голосов
/ 15 декабря 2010

У меня есть страница с текстовым полем, где пользователь должен ввести 24-значный регистрационный код (буквы и цифры, без учета регистра).Я использовал maxlength, чтобы ограничить пользователя вводом 24 символов.

Регистрационные коды обычно задаются в виде групп символов, разделенных тире, но я бы хотел, чтобы пользователь вводил коды без тире.

Как я могу написать свой код JavaScript без jQuery, чтобы проверить, что данная строка, введенная пользователем, не содержит тире или, что еще лучше, содержит только буквенно-цифровые символы?

Ответы [ 15 ]

532 голосов
/ 15 декабря 2010

Чтобы найти «привет» в your_string

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

Для буквенного числа вы можете использовать регулярное выражение:

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

Буквенно-цифровое регулярное выражение

51 голосов
/ 16 июня 2017

С ES6 .include ()

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

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

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

E: Не поддерживается IE - вместо этого вы можете использовать оператор Тильды ~ ( Битовый НЕ ) с .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
45 голосов
/ 15 декабря 2010

Если у вас есть текст в переменной foo:

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

Это позволит проверить и убедиться, что пользователь ввел хотя бы один символ и ввел только буквенно-цифровых символов.

17 голосов
/ 11 апреля 2013

проверить, содержит ли строка (слово / предложение ...) определенное слово / символ

if ( "write something here".indexOf("write som") > -1 )  { alert( "found it" );  } 
7 голосов
/ 03 декабря 2017

ES6 содержит встроенный метод (includes) в строке prototype, который можно использовать для проверки, содержит ли строка другую строку.

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;
    }
  };
}
6 голосов
/ 15 декабря 2010

Используйте для этого регулярное выражение.

function isAlphanumeric( str ) {
 return /^[0-9a-zA-Z]+$/.test(str);
}
5 голосов
/ 03 октября 2014

Вы все слишком усердно думаете.Просто используйте простое регулярное выражение, это ваш лучший друг.

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 минут?

4 голосов
/ 22 января 2015
var inputString = "this is home";
var findme = "home";

if ( inputString.indexOf(findme) > -1 ) {
    alert( "found it" );
} else {
    alert( "not found" );
}
3 голосов
/ 13 июля 2018

Если вы ищете символы в начале или в конце строки, вы также можете использовать startsWith и endsWith

const country = "pakistan";
country.startsWith('p'); // true
country.endsWith('n');  // true
3 голосов
/ 09 ноября 2015

Ответ Кевинса правильный, но для него требуется «магическое» число:

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

В этом случае вам нужно знать, что -1 означает not found . Я думаю, что немного лучшая версия будет:

var containsChar = s.indexOf(somechar) >= 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...