Вибачте всіх, суперечок немає. Але для того, щоб громада зростала так, як виросла мене в ці роки, добре зробити кілька записок.
Справжня буквено-числова струна схожа на, "0a0a0a0b0c0d"
а не як "000000"
або "qwertyuio"
.
Усі відповіді, які я прочитав тут, повернулися true
в обох випадках. І вибачте, ІМХО, це неправильно .
Якщо я хочу перевірити, чи є в моєму "00000"
рядку буквене слово, моя "людська" відповідь, безперечно, ЛЕГА.
Чому? Простий. Я не можу знайти жодного буквенного знаку. Отже, є простим числовим рядком [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. Я не знайшов відповіді "готовий до руху", але, як це часто трапляється на "Стакковерф", поняття знання та порівняння один з одним є чимось піднесеним, що змушує задуматися про чиюсь відповідь і знайти разом рішення, яким ви були шукали, але ти не думав, що ти це знаєш.
І поділіться цим!
Найкраще
Оскар