2010-12-14 4 views
206

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

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

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

+1

Ответ здесь http://stackoverflow.com/questions/3192612 имеет информацию о том, как проверить на буквенно-цифровой. – JasCav

+1

И для изучения регулярных выражений: http://www.regular-expressions.info –

+0

Для вас, пользователей jquery, вы должны и могли использовать 'inArray'. – JonH

ответ

418

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

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

Для буквенно-цифровой, вы можете использовать регулярное выражение:

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

Alpha Numeric Regular Expression

+0

Это было очень полезно. Говоря как программист на языке python, я использую это, чтобы заменить ключевое слово «in» (которое может или не может быть неортодоксальным, я не уверен), но он работает не только для одного символа. –

+0

Я не понимаю, как это было проголосовано за ответ. Я вижу, что многие люди приезжают сюда в Гуглинг. Лучше всего будет использовать регулярное выражение. – Spock

+17

Вы должны использовать регулярное выражение для проверки одного символа? Это чрезмерное количество накладных расходов, чтобы получить то же самое, что и встроенная функция. Есть много людей, которые не понимают регулярное выражение, и, как правило, лучший ответ - лучший. – kemiller2002

29

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

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

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

5

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

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

Это будет проверять ровно * одну цифру и не будет принимать все буквенно-цифровые символы, как желает OP. – cdhowie

+0

@cdhowie .. забыли +, но я неправильно понял вопрос. Спасибо за указание. –

2

Чтобы проверить только буквенно-цифровых символов:

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

Регулярное выражение проверяет на 1 или более (+) из набора символов 0-9, AZ, и аз, начиная с самого начала ввода (^) и остановки с окончанием ввода ($).

17

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

if ("write something here".indexOf("write som") > -1) { alert("found it"); } 
+0

Это работает на IE? -> http://stackoverflow.com/questions/3480771/jquery-how-to-see-if-string-contains-substring –

-1

Рабочая perfectly.This exmple поможет много.

<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> 
1

Попробуйте это:

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

Вот пример: http://jsfiddle.net/oliverni/cb8xw/

4

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

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 

Learn Regex in 5 minutes?

+0

Чтобы сделать что-то практическое с этим, вы просто запустите его в выборе: 'if (string1.test (regex)) {alert (« Ему нравится пицца! »); } ' –

+0

И ваш буквенно-цифровой тест будет ...' var regex =/^ [a-z0-9] + $/i' –

+1

Это назад. См. Https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test regexObj.test (str) –

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

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

функция Строка поиска является полезным тоже. Он ищет символ, а также строку sub_string в заданной строке.

'apple'.search('pl') возвращает 2

'apple'.search('x') возвращение -1

-1

Kevins ответ является правильным, но это требует "магического" числа следующим образом: вар containsChar = s.indexOf (SomeChar) == -1; В этом случае вам необходимо знать, что -1 выступает за не найдено. Я думаю, что немного лучше версия будет: var containsChar = s.indexOf (somechar)> = 0;

+0

Ну в соответствии с [оригиналом] (http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%201st%20edition,%20June % 201997.pdf # page = 83), [текущий] (http://www.ecma-international.org/ecma-262/6.0/#sec-string.prototype.indexof) и [черновик] (https://tc39.github.io/ecma262/#sec-string.prototype.indexof), 'indexOf()' будет возвращать * -1 *, если строка не найдена. Так что это больше не * волшебство *, чем использование * 0 *. – cpburnz

-4
var emailID=document.getElementById("emailField").value; 
    if(!emailID.contains("@")) 
    { 
     alert("Wrong EmailID"); 
    } 
+1

Строки не имеют метода 'contains()'. – cpburnz

12

С ES6 includes

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

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

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

Простой, читаемый и возвращает логическое значение. Идеально подходит, когда вам не нужно регулярное выражение. – bryanbraun

3

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

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

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

После polyfill может быть использован для добавления этого метода в неподдерживаемых браузерах. (Source)

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

Смежные вопросы