申し訳ありませんが、論争はありません。しかし、ここ数年で私が成長したようにコミュニティが成長するためには、いくつかのメモを書くのは良いことです。
本当の英数字の文字列は次のようで"0a0a0a0b0c0d"
はないよう"000000"
か"qwertyuio"
。
私がここで読んだすべての答えはtrue
、どちらの場合でも返されました。そして、私を許してください、私見、これは正しくありません。
"00000"
文字列が英数字かどうかを確認したい場合、私の「人間」の答えは間違いなくFALSEです。
どうして?シンプル。文字charが見つかりません。つまり、は単純な数値文字列[0-9]
です。
一方、"abcdefg"
文字列を確認したい場合、私の「人間」の答えはFALSEです。数字が見えないので、英数字ではありません。ただのアルファ[a-zA-Z]
。
マイケル・マーティン・スマッカーの答えは、照明されています。
しかし、彼は正規表現ではなく、より良いパフォーマンスを達成することを目的としていました。これは本当です、より良いパフォーマンスがある低レベルの方法を使用します。しかし、結果は同じです。文字列"0123456789"
(数値"qwertyuiop"
のみ)、"0a1b2c3d4f4g"
(英数字のみ)、および(英数字)はTRUE
、英数字として返されます。同じ正規表現の/^[a-z0-9]+$/i
方法。正規表現が機能しない理由は、単純明快です。構文[]
はorおよびnot を示します。したがって、それが数値のみの場合、または文字のみの場合、regexはを返しますtrue
。
しかし、それでもマイケル・マーティン・スマッカーの答えは輝かしいものでした。私のために。「低レベル」で考えることができ、英数字の文字列を明確に処理する実際の関数を作成できました。私はそれをPHP相対関数のように呼び出しましたctype_alnum
(編集2020-02-18:ただし、これはORではなくANDをチェックします)。
これがコードです:
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
};
...そして、これがデモです
PHP関数の代わりにJavaScriptを使用する方法を探していたため、このディスカッションに参加しました。「すぐに使える」という答えは見つかりませんでしたが、Stackoverflowでよくあることですが、知識とお互いの比較の概念は崇高なものであり、誰かの答えについて考え、一緒にあなたの解決策を見つけることにつながります探していましたが、あなたはそれを知っているとは思いませんでした。
そしてそれを共有してください!
ベスト
オスカー