Проверьте, является ли строка буквенно-цифровой или буквенно-цифровой + некоторые допустимые символы
Самый быстрый алфавитно-цифровой метод, вероятно, как упомянуто в: Лучший способ алфавитно-цифровой проверки в Javascript, поскольку он работает непосредственно с диапазонами номеров.
Затем, чтобы разумно использовать несколько дополнительных символов, мы можем просто поместить их вSet
быстрый поиск.
Я считаю, что эта реализация будет правильно работать с суррогатными парами .
#!/usr/bin/env node
const assert = require('assert');
const char_is_alphanumeric = function(c) {
let code = c.codePointAt(0);
return (
// 0-9
(code > 47 && code < 58) ||
// A-Z
(code > 64 && code < 91) ||
// a-z
(code > 96 && code < 123)
)
}
const is_alphanumeric = function (str) {
for (let c of str) {
if (!char_is_alphanumeric(c)) {
return false;
}
}
return true;
};
// Arbitrarily defined as alphanumeric or '-' or '_'.
const is_almost_alphanumeric = function (str) {
for (let c of str) {
if (
!char_is_alphanumeric(c) &&
!is_almost_alphanumeric.almost_chars.has(c)
) {
return false;
}
}
return true;
};
is_almost_alphanumeric.almost_chars = new Set(['-', '_']);
assert( is_alphanumeric('aB0'));
assert(!is_alphanumeric('aB0_-'));
assert(!is_alphanumeric('aB0_-*'));
assert(!is_alphanumeric('你好'));
assert( is_almost_alphanumeric('aB0'));
assert( is_almost_alphanumeric('aB0_-'));
assert(!is_almost_alphanumeric('aB0_-*'));
assert(!is_almost_alphanumeric('你好'));
GitHub вверх по течению .
Протестировано в Node.js v10.15.1.