フォームチェックの面接問題を聞くと、どんな答えがほしいですか.
4009 ワード
面接問題
8~10ビットの長さの文字列のみを含むユーザー名フォームを検証し、JavaScriptで検証関数を実現します.
1解決プロセス
1.1まず問題の需要を確認する(ほとんど確認した人がいない、もちろん正しいと書いた人もいない)
1.1.1問題要求
1.1.2 Tips
1.2次に考えを分析する(コードを書くことができる等価論理表現に変換しても、誰も正しいことを書いたことがない)
1.2.1等価論理変換一
1.2.2等価論理変換二
1.2.3等価論理変換三
1.2.4 Tips
1.3次にコアコード実装(クリアの正則、私たちも先に正則)
1.3.1ゼロ幅の順方向先行断言の使用
1.3.1.1コード実装
/^(?=.*\d.*)(?=.*[a-zA-Z].*)[0-9a-zA-Z]{8,10}$/.test(str)
1.3.1.2コード解釈
(?=)
は順方向先行断言を表し、条件を満たす他のマッチング結果が真である、すなわちカッコ内の式マッチング全体が真である1.3.1.3論理表現
1.3.2ゼロ幅負の先行断言の使用
1.3.2.1コード実装
/^(?!\d+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{8,10}$/.test(str)
1.3.2.2コード解釈
(?!)
は負の先行断言を表し、非条件を満たす他の一致結果が真である、すなわち括弧内の式が一致しない一致結果全体が真である1.3.2.3論理表現
1.3.3上記の方法が分からない場合は、分割してもいいです。
1.3.3.1コード実装
!/^\d+$/.test(str) && !/^[a-zA-Z]+$/.test(str) && /^[0-9a-zA-Z]{8,10}$/.test(str)
1.3.3.2コード解釈
1.3.4正規表現が分からない場合は、文字で判断することもできます
1.3.4.1コード実装
// ASCII
var rangeChars = '09azAZ';
var char0Code = rangeChars.charCodeAt(0),
char9Code = rangeChars.charCodeAt(1),
charaCode = rangeChars.charCodeAt(2),
charzCode = rangeChars.charCodeAt(3),
charACode = rangeChars.charCodeAt(4),
charZCode = rangeChars.charCodeAt(5);
Array.from(str).every(char => {
return '0' <= char && char <= '9' || 'a' <= char && char <= 'z' || 'A' <= char && char <= 'Z'
});
Array.from(str).some(char => {
return '0' <= char && char <= '9'
});
Array.from(str).some(char => {
return 'a' <= char && char <= 'z' || 'A' <= char && char <= 'Z'
});
8 <= str.length && str.length <= 10
1.4結果の出力
export const validationUtil = {
isNameValid:(str) => {
// isNameValid , undefind, null ,
str += '';
str = str.trim();
return /^(?!\d+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{8,10}$/.test(str);
}
}