Простите меня, без споров. Но для того, чтобы сообщество росло так, как выросло меня за эти годы, хорошо сделать несколько заметок.
Настоящая буквенно-цифровая строка похожа, "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: где, однако, проверяется ИЛИ, а не И ).
Вот код:
function ctype_alnum(str) {
var code, i, len;
var isNumeric = false, isAlpha = false; //I assume that it is all non-alphanumeric
for (i = 0, len = str.length; i < len; i++) {
code = str.charCodeAt(i);
switch (true){
case code > 47 && code < 58: // check if 0-9
isNumeric = true;
break;
case (code > 64 && code < 91) || (code > 96 && code < 123): //check if A-Z or a-z
isAlpha = true;
break;
default: // not 0-9, not A-Z or a-z
return false; //stop function with false result, no more checks
}
}
return isNumeric && isAlpha; //return the loop results, if both are true, the string is certainly alphanumeric
};
... а вот ДЕМО
Я пришел к этому обсуждению, потому что искал в javascript альтернативу функции PHP. Я не нашел ответа «готов к работе», но, как это часто бывает в Stackoverflow, концепция знания и сравнения друг с другом - это нечто возвышенное, что заставляет вас думать о чьем-то ответе и вместе находить решение, которым вы были искал, но вы не думали, что знаете об этом.
И поделитесь этим!
Лучший
Оскар