Простите меня, никаких споров.Но чтобы сообщество росло так, как оно выросло за эти годы, полезно сделать несколько замечаний.
Настоящая буквенно-цифровая строка похожа на "0a0a0a0b0c0d"
, а не на "000000"
или "qwertyuio"
.
Все ответы, которые я здесь прочитала, вернули true
в обоих случаях.И простите меня, ИМХО, это не правильно .
Если я хочу проверить, является ли моя строка "00000"
буквенно-желтой, мой "человеческий" ответ, несомненно, ЛОЖЬ.
Почему?Просто.Я не могу найти букву чар.Итак, это простая числовая строка [0-9]
.
С другой стороны, если я хочу проверить свою строку "abcdefg"
, мой «человеческий» ответ даже ЛОЖЬ.Я не вижу цифры, так что это не буквенно-цифровой.Просто альфа [a-zA-Z]
.
Ответ Майкла Мартина-Смукера был светящимся.
Однако он был нацелен на достижение лучшей производительности вместо регулярных выражений.Это правда, используя низкоуровневый способ, лучше производительность.Но результаты все те же.Строки "0123456789"
(только числовые), "qwertyuiop"
(только буквенные) и "0a1b2c3d4f4g"
(буквенно-цифровые) возвращают TRUE
в виде буквенно-цифровых символов.То же регулярное выражение /^[a-z0-9]+$/i
способ.Причина, по которой регулярное выражение не работает, настолько проста, насколько очевидна.Синтаксис []
указывает или , а не и .Итак, если это только цифра или , если это только буквы, регулярное выражение возвращает true
.
Но, ответ Майкла Мартина-Смукера былтем не менее освещающий.Для меня.Это позволило мне думать на «низком уровне», чтобы создать реальную функцию, которая однозначно обрабатывает буквенно-цифровую строку.Я назвал это как относительную функцию PHP ctype_alnum
.
Вот код:
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
};
... и вот DEMO
Iпришел к этому обсуждению, потому что я искал альтернативу в JavaScript для функции PHP.Я не нашел ответ «готов к работе», но, как это часто случается в Stackoverflow, концепция знания и сравнения друг с другом является чем-то возвышенным, что заставляет вас задуматься о чьем-то ответе инайдите вместе решение, которое вы искали, но не думали, что знаете это.
И поделиться им!
Лучший
Оскар