export default (value = "") => {
let error = null;
const stripped = value.replace(/^[0-9a-zA-Z]*$/, "");
if (stripped.length !== value.length) {
error = "Input Contains Bad Characters";
}
return { error, value };
};
// This below code for varying the formats
import validator from "../../validators/alpha-numeric.js";
describe("Alphanumeric Only Validator For Input Validation", () => {
test("Only Characters Passed", () => {
expect(validator("Abcd")).toMatchObject({
error: null,
value: "Abcd"
});
});
test("Alphanumeric Characters With Space", () => {
expect(validator("Abc d")).toMatchObject({
error: "Input Contains Bad Characters",
value: "Abc d"
});
});
test("Alphanumeric Characters With Numbers", () => {
expect(validator("Ab123d")).toMatchObject({
error: null,
value: "Ab123D"
});
});
test("Alphanumeric Characters With Special Characters", () => {
expect(validator("Abcd@")).toMatchObject({
error: "Input Contains Bad Characters",
value: "Abcd@"
});
});
});
这是我在React中使用的完整代码,请指导我如何验证字母数字的完美结果。
这是要求,即使以下描述了我编写的用于单元测试的代码,但是如果我正在运行“ yarn unit-test”,那么我就会出错。
答案 0 :(得分:1)
此:
const stripped = value.replace(/^[0-9a-zA-Z]*$/, "");
由于锚点(^
和$
的原因,仅替换字符串中唯一的那些字符。
如果您要检查value
仅包含那些字符,则无需创建另一个字符串:
if (/[^0-9a-zA-Z]/.test(value)) {
// It has an invalid character
}
之所以有用,是因为正则表达式将匹配0-9,a-z或A-Z以外的任何字符。如果不匹配,则没有任何无效字符。
示例:
function test(value) {
if (/[^0-9a-zA-Z]/.test(value)) {
console.log(JSON.stringify(value), "=> invalid");
} else {
console.log(JSON.stringify(value), "=> valid");
}
}
test(""); // Valid
test("0a"); // Valid
test("Ab123d") // Valid
test("0a-"); // Invalid
答案 1 :(得分:0)
大家好,我已经解决了这个问题,请找到字母数字模式/\w/
。此模式对我有用,也请查找创建正则表达式的步骤... enter link description here