Как лучше всего выполнить буквенно-цифровую проверку INPUT
поля JSP
? Я прикрепил свой текущий код
<script type="text/javascript">
function validateCode(){
var TCode = document.getElementById('TCode').value;
for(var i=0; i<TCode.length; i++)
{
var char1 = TCode.charAt(i);
var cc = char1.charCodeAt(0);
if((cc>47 && cc<58) || (cc>64 && cc<91) || (cc>96 && cc<123))
{
}
else {
alert('Input is not alphanumeric');
return false;
}
}
return true;
}
javascript
validation
t0mcat
источник
источник
Ответы:
Вы можете использовать это регулярное выражение
/^[a-z0-9]+$/i
источник
""
) не должны совпадать.ñ
не попадает в шаблон, однако является полностью действительным символом UTF-8.charCodeAt()
. См. JsPerf и мой ответ ниже .Изначальная склонность спрашивающего к использованию
str.charCodeAt(i)
оказывается быстрее, чем альтернатива регулярному выражению. В моем тесте на jsPerf параметр RegExp работает на 66% медленнее в Chrome 36 (и немного медленнее в Firefox 31).Вот очищенная версия исходного кода проверки, который получает строку и возвращает
true
илиfalse
:Конечно, могут быть другие соображения, например, удобочитаемость. Однострочное регулярное выражение определенно красивее. Но если вы строго озабочены скоростью, вы можете рассмотреть эту альтернативу.
источник
Проверьте это с помощью регулярного выражения.
Регулярное выражение Javascript не имеет классов символов POSIX, поэтому вам придется писать диапазоны символов вручную:
Здесь
^
означает начало строки и$
означает конец строки, а также[0-9a-z]+
означает один или несколько символов от0
до9
ИЛИ отa
доz
.Дополнительная информация о регулярном выражении Javascript здесь: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions
источник
/^[a-z0-9]+$/i
и это будет охватывать как строчные, так и прописные буквыВам не нужно делать это по одному. Просто сделайте тест для всех, которые не являются буквенно-цифровыми. Если он найден, проверка не выполняется.
Если есть хотя бы одно совпадение не буквенно-цифрового символа, оно будет
return false
.источник
Я бы создал метод прототипа String:
Тогда использование будет следующим:
источник
Кроме того, эта статья также помогает понять , буквенно - цифровую проверку JavaScript.
источник
Простите меня, без споров. Но для того, чтобы сообщество росло так, как выросло меня за эти годы, хорошо сделать несколько заметок.
Настоящая буквенно-цифровая строка похожа,
"0a0a0a0b0c0d"
а не на"000000"
или"qwertyuio"
.Все ответы, которые я прочитал здесь, были возвращены
true
в обоих случаях. И уж простите, ИМХО, это не правильно .Если я хочу проверить, является ли моя
"00000"
строка буквенной, мой «человеческий» ответ, несомненно, ЛОЖНЫЙ.Зачем? Просто. Я не могу найти ни одной буквы char. Итак, это простая числовая строка
[0-9]
.С другой стороны, если бы я хотел проверить свою
"abcdefg"
строку, мой «человеческий» ответ даже ЛОЖЬ. Я не вижу цифр, значит, они не буквенно-цифровые. Просто альфа[a-zA-Z]
.В ответ Майкл Мартин-Смакер в была освещая.
Однако он был нацелен на достижение лучшей производительности вместо регулярного выражения. Это правда, использование низкоуровневого способа дает лучшую производительность. Но результат тот же. Строки
"0123456789"
(только числовые),"qwertyuiop"
(только буквенные) и"0a1b2c3d4f4g"
(буквенно-цифровые) возвращаютсяTRUE
как буквенно-цифровые. Тот же/^[a-z0-9]+$/i
способ регулярного выражения . Причина, по которой регулярное выражение не работает, настолько же проста, насколько очевидна. Синтаксис[]
указывает или , а не и . Итак, если это только число или только буквы, регулярное выражение возвращаетсяtrue
.Но, тем не менее , ответ Майкла Мартина-Смакера прояснил . Для меня. Это позволило мне думать на «низком уровне», создать настоящую функцию, которая однозначно обрабатывает буквенно-цифровую строку. Я назвал это относительной функцией PHP
ctype_alnum
( отредактируйте 2020-02-18: где, однако, проверяется ИЛИ, а не И ).Вот код:
... а вот ДЕМО
Я пришел к этому обсуждению, потому что искал в javascript альтернативу функции PHP. Я не нашел ответа «готов к работе», но, как это часто бывает в Stackoverflow, концепция знания и сравнения друг с другом - это нечто возвышенное, что заставляет вас думать о чьем-то ответе и вместе находить решение, которым вы были искал, но вы не думали, что знаете об этом.
И поделитесь этим!
Лучший
Оскар
источник
return isNumeric || isAlpha;
является alphaNumeric. Вышеупомянутое может быть полезно для некоторых.В жестком цикле, вероятно, лучше избегать регулярных выражений и жестко кодировать ваши символы:
источник
Чтобы проверить, является ли input_string буквенно-цифровым, просто используйте:
источник