如何在 JavaScript 中检查字符串是否仅包含数字?

javascriptweb developmentfront end technology

在开发过程中,我们可能需要找到只包含数字而不包含任何其他字符的字符串。最简单的检查方法是解析字符串中的数字并将其长度与原始字符串的长度进行比较。如果两者相同,则表示字符串仅包含数字。用户可以使用 parseInt() 方法解析字符串中的数字。

但是,在本教程中,我们将学习其他方法来检查 JavaScript 中的字符串是否仅包含数字。

使用 for 循环和 CharCodeAt() 方法

我们可以使用 for 循环遍历字符串。我们可以使用其索引值从字符串中获取每个字符,并使用 charCodeAt() 方法获取其 ASCII 值。之后,我们可以将字符的 ASCII 值与数字的 ASCII 值进行比较,并得出该字符是数字还是非数字的结果。

语法

用户可以按照以下语法检查字符串是否仅包含数字。

function isOnlyDigits(string) {
   for (let i = 0; i < string.length; i++) {
      var ascii = string.charCodeAt(i);
      if (ascii < 48 || ascii > 57) {
         return false;
      }
   }
   return true;
}

在上述语法中,我们对每个字符串字符执行 charCodeAt() 方法。

步骤

步骤 1 - 使用 for 循环遍历字符串。

步骤 2 - 使用 charCodeAt() 方法获取字符串中第 i 个索引处的字符的 ASCII 值

步骤 3 - 检查索引第 i 个字符的 ASCII 值是否介于 48 和 57 之间。如果不是,则表示它是一个非数字字符并返回 false。

步骤 4 - 如果 for 循环的迭代完成,并且函数未找到任何非数字字符,则返回 true,表示字符串仅包含数字。

示例

在下面的示例中,我们取两个仅包含数字和混合字符的字符串。用户可以观察输出,它会根据仅包含数字或非数字的字符串在网页上打印消息。

<html>
<body>
   <h3>Using the <i> for-loop and charCodeAt() </i> method to check if string contains only digits</h2>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById("output");
      function isOnlyDigits(string) {
         for (let i = 0; i < string.length; i++) {
            var ascii = string.charCodeAt(i);
            if (ascii < 48 || ascii > 57) {
               output.innerHTML += "The " + string + " contains non-digits characters also. <br/>";
               return false;
            }
         }
         output.innerHTML += "The " + string + " contains only digits characters also. <br/>";
         return true;
      }
      isOnlyDigits("122135567343");
      isOnlyDigits("df32d23");
   </script>
</body>
</html>

使用 Number() 构造函数

在 JavaScript 中,Number 是一个对象,我们可以使用它的构造函数来创建它的实例。我们可以将一个值作为 Number() 构造函数的参数传递,以使用数字值初始化变量。

我们还可以将数字字符串作为 Number() 构造函数的参数传递。它解析数字并返回数字值。如果我们传递包含非数字字符的字符串,它将返回 NaN 值。

语法

用户可以使用以下语法使用 Number constructor() 检查字符串是否仅包含数字。

let num = Number(string1);
if (num != NaN) {

    // 包含非数字
}else{

    // 仅包含数字。
}

在上述语法中,string1 是一个包含数字和非数字字符的字符串。如果 Number() 构造函数返回 NaN,则该字符串包含非数字字符;否则,它将返回数字值。

示例

在下面的示例中,string1 仅包含数字。我们已将其作为 Number() 构造函数的参数传递,用户可以看到它在输出中返回实际数字值而不是 NaN。

<html>
<body>
    <h3>Using the <i> Number() constructor </i> method to check if string contains only digits</h2>
    <div id="output"></div>
    <script>
      let output = document.getElementById("output");
      let string1 = "3433454646";
      let num = Number(string1);
      if (num != NaN) {
         output.innerHTML += "The " + string1 + " Contains only digits! <br/>";
      } else {
         output.innerHTML += "The " + string1 + " Contains non-digits characters! <br/>";
      }
      </script>
</body>
</html>

使用正则表达式

在本节中,我们将创建一个正则表达式,用于将非数字字符与字符串进行匹配。如果我们找到任何单个非数字字符的匹配项,则可以说该字符串也包含非数字字符。

语法

用户可以按照以下语法使用正则表达式检查字符串是否仅包含数字。

let regex = /\D/;
let bool = regex.test(str);
if (bool) {

    // 包含非数字
} else {

    // 仅包含数字
}

上述语法中使用 test() 方法将正则表达式模式与字符串进行匹配。

如果字符串包含任何非数字字符,则 test() 方法返回 true。

正则表达式解释

  • \D − 用于匹配任何单个非数字字符。

我们还可以在正则表达式中使用"g"标志来匹配所有出现的非数字字符,但我们足以知道该字符串仅包含单个非数字字符。

示例

在此示例中,当用户单击按钮时,isContainsDigits()函数具有不同的字符串参数。此外,用户可以观察具有不同字符串的 test() 方法的输出。

<html>
<body>
   <h3>Using the <i> regular expression </i> method to check if string contains only digits </h3>
   <div id = "output"> </div>
   <button onclick="isContainsDigits('8954656');isContainsDigits('dfjsdh4354354')">
      Click here
   </button>
   <script>
      let output = document.getElementById("output");
      let regex = /\D/;
      function isContainsDigits(str) {
         let bool = regex.test(str);
         if (bool) {
            output.innerHTML += "The " + str + " Contains non-digits! <br/>";
         } else {
            output.innerHTML += "The " + str + " Contains only digits characters! <br/>";
         }
      }
   </script>
</body>
</html>

我们学习了三种不同的方法来检查字符串是否仅包含数字。用户可以使用 Number() 构造函数通过一个线性代码执行该任务。


相关文章