反应字母数字验证问题

时间:2019-01-10 10:50:51

标签: javascript reactjs user-interface

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”,那么我就会出错。

2 个答案:

答案 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