JavaScript中的字符串验证功能

时间:2018-03-26 04:26:07

标签: javascript

我试图创建一个很好的util函数来验证字符串。条件是:

  1. 不能typeof "undefined"
  2. 不能null
  3. 必须是字符串,即不是数字,对象,数组等。
  4. 必须至少包含一个字符。因此,值为''的字符串将无效。
  5. 我发现了一些关于这一点的建议,建议使用RegEx是这样做的,但是当我给它一个数值时,以下内容不起作用。

    这是我到目前为止所拥有的:

    const isValidString = (str1) => {
    
       if(typeof str1 === "undefined" || str1 === null) return false;
    
       const validRegEx = /^[^\\\/&]*$/;
       if(str1.match(validRegEx)) {
          return true;
       } else {
          return false;
       }
    }
    

    正如我所说,如果将const str1 = 3;发送给此函数,我会收到一条错误:

      

    " TypeError:badString.match不是函数

    我错过了什么?

7 个答案:

答案 0 :(得分:2)

if (str1 != null)会强制str1值,并会同时针对nullundefined进行检查。

编辑:忽略此部分(另外,您不需要使用正则表达式来检查是否至少有一个字符。您可以使用字符串lengthstr1.length将评估为{ {1}} y值如果为0,否则它将评估为false您的值。)您需要一个严格的true值,因此它应该是boolean

str1.length > 0

答案 1 :(得分:1)

为什么不添加typeof str1 === 'string',如下所示

if(typeof str1 === 'string' && str1.match(validRegEx)) {
  return true;
} else {
  return false;
}

答案 2 :(得分:0)

这是因为匹配方法仅适用于字符串,并且您尝试在数字上调用它。

我建议重新编写函数以确保参数是一个字符串,而不是只检查null或未定义的值:

const isValidString = str1 => {
  if (!str1 || typeof str1 !== 'string') return false

  const validRegEx = /^[^\\\/&]*$/

  if (str1.match(validRegEx)) {
    return true
  } else {
    return false
  }
}

答案 3 :(得分:0)

将数字转换为字符串执行评估



const isValidString = (str1) => {
str1 = str1.toString();
   if(typeof str1 === "undefined" || str1 === null) return false;

   const validRegEx = /^[^\\\/&]*$/;
   if(str1.match(validRegEx)) {
      return true;
   } else {
      return false;
   }
}

console.log(isValidString(3))




答案 4 :(得分:0)

将if替换为以下内容:

if(typeof str1 === "undefined" || str1 === null || typeof str1 !== 'string') return false;

答案 5 :(得分:0)

请改用RegExp#test,因为您的正则表达式始终可用。此外,String#match返回一个不太适合布尔表达式的数组(或null),可能会产生不需要的结果。



const isValidString = (str1) => {

  if (typeof str1 === "undefined" || str1 === null) return false;
  const validRegEx = /^[^\\\/&]*$/;
  
  if (validRegEx.test(str1)) {
    return true;
  } else {
    return false;
  }
}

console.log(isValidString(1));
console.log(isValidString('string'));




注意,您的正则表达式仍然是错误的,因为它将数字验证为true。你需要进一步调整它。

答案 6 :(得分:0)

在这一点上归功于djfdev,我真正做的就是简化他的答案,使其更加简洁。

const isValidString = str1 => {
    return typeof str1 === 'string' && /^[^\\\/&]*$/.test(str1);
}