Kiểm tra xem một chuỗi đầu vào có chứa một số trong javascript


137

Mục tiêu cuối cùng của tôi là xác nhận một trường đầu vào. Đầu vào có thể là chữ cái hoặc số.


4
Bạn không cần jQuery cho điều đó.
Vidime Vidas

Vui lòng chỉnh sửa tiêu đề câu hỏi của bạn, thành một cái gì đó chính xác hơn như "Nhập vào jQuery chỉ xác thực các ký tự chữ cái" vì mô tả của bạn không dẫn đến câu trả lời nào về "cách tìm số trong chuỗi", do đó dẫn đến kết quả tìm kiếm không liên quan cho cộng đồng của chúng tôi. Cảm ơn!
Juanma Guerrero

Đã chỉnh sửa "jQuery" khỏi tiêu đề câu hỏi và được thay thế bằng "Javascript".
VKen

@VKen, Không cần thiết phải đặt thẻ vào tiêu đề.
Starx

@Starx lưu ý, tôi chỉ giữ định dạng cho câu hỏi bắt đầu bằng.
VKen

Câu trả lời:


288

Nếu tôi không nhầm, câu hỏi yêu cầu "chứa số", không phải "là số". Vì thế:

function hasNumber(myString) {
  return /\d/.test(myString);
}

1
Chính xác những gì tôi cần. Cảm ơn
AndyH

giải pháp này không tính đến các số không nguyên như 3,2 hoặc 1e4
ekkis

8
Nó làm. Kiểm tra trong bảng điều khiển: hasNumber ("check 3.2 hoặc 1e4") = true vs hasNumber ("check no number") = false. Vì bản thân 3,2 và 1e4 chứa số.
Zon

Tại sao câu trả lời này không nằm trên đầu trang?
Rakesh Nair

Nó trả lời chính xác câu hỏi đặt ra.
Zon

108

Bạn có thể làm điều này bằng cách sử dụng javascript. Không cần Jquery hoặc Regex

function isNumeric(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

Trong khi thực hiện

var val = $('yourinputelement').val();
if(isNumeric(val)) { alert('number'); } 
else { alert('not number'); }

Cập nhật: Để kiểm tra xem một chuỗi có số trong đó không, bạn có thể sử dụng các biểu thức thông thường để làm điều đó

var matches = val.match(/\d+/g);
if (matches != null) {
    alert('number');
}

2
matches != nullcó nghĩa là không undefinedhoặc nulltrong khi matches !== nullcó nghĩa là cụ thể không nullnhưng vượt qua undefined.
Nate

match()trả về một mảng hoặc null. Vì vậy, if (matches !== null)sẽ ổn thôi (và nó sẽ làm hài lòng JSHint.) Nguồn: developer.mozilla.org/en/docs/Web/JavaScript/Reference/
Jason

Nó nên isFinite(parseFloat(n))ở trong ví dụ đầu tiên. isNumeric("5,000")thất bại
m.spyratos

@ m.spyratos, Vâng, isFinite()cho đúng nếu giá trị được truyền là một finitesố và số 5,000là một chuỗi số được định dạng không phải là số hữu hạn.
Starx

@ Starx, tôi đồng ý. Nhưng nếu bạn không hỗ trợ chuỗi định dạng làm đầu vào, thì tại sao bạn sử dụng parse float in isNaN? Tôi sẽ đề nghị loại bỏ phân tích cú pháp nổi isNaNhoặc thêm nó vào isFiniteđể được bao gồm.
m.spyratos

22
function validate(){    
    var re = /^[A-Za-z]+$/;
    if(re.test(document.getElementById("textboxID").value))
       alert('Valid Name.');
    else
       alert('Invalid Name.');      
}

Tôi đã phải đọc toàn bộ câu hỏi để nhận ra điều này thực sự trả lời chính xác câu hỏi được hỏi. Tiêu đề câu hỏi là một chút lừa dối.
Nate

9

Nó không chống đạn bằng bất kỳ phương tiện nào, nhưng nó hoạt động cho mục đích của tôi và có thể nó sẽ giúp được ai đó.

var value = $('input').val();
 if(parseInt(value)) {
  console.log(value+" is a number.");
 }
 else {
  console.log(value+" is NaN.");
 }

Boolean(parseInt(3)) -> true; Boolean(parseInt("3")) -> true; Boolean(parseInt("three")) -> false
Elon Zito

5

Sử dụng biểu thức chính quy với JavaScript . Biểu thức chính quy là một chuỗi văn bản đặc biệt để mô tả một mẫu tìm kiếm, được viết dưới dạng / mẫu / bổ nghĩa trong đó "mẫu" là chính biểu thức chính và "bổ nghĩa" là một chuỗi các ký tự chỉ ra các tùy chọn khác nhau.
         Lớp nhân vật là khái niệm regex cơ bản nhất sau một trận đấu theo nghĩa đen. Nó làm cho một chuỗi ký tự nhỏ khớp với một bộ ký tự lớn hơn. Ví dụ, [A-Z]có thể là viết tắt của bảng chữ cái in hoa và \dcó thể có nghĩa là bất kỳ chữ số nào.

Từ ví dụ dưới đây

  • contains_alphaNumeric«Nó kiểm tra chuỗi chứa cả chữ cái hoặc số (hoặc) cả chữ cái và số. Các dấu gạch ngang (-) bị lờ đi .
  • onlyMixOfAlphaNumeric«Nó kiểm tra chuỗi chỉ chứa cả chữ và số của bất kỳ thứ tự chuỗi nào.

Thí dụ:

function matchExpression( str ) {
    var rgularExp = {
        contains_alphaNumeric : /^(?!-)(?!.*-)[A-Za-z0-9-]+(?<!-)$/,
        containsNumber : /\d+/,
        containsAlphabet : /[a-zA-Z]/,

        onlyLetters : /^[A-Za-z]+$/,
        onlyNumbers : /^[0-9]+$/,
        onlyMixOfAlphaNumeric : /^([0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+)[0-9a-zA-Z]*$/
    }

    var expMatch = {};
    expMatch.containsNumber = rgularExp.containsNumber.test(str);
    expMatch.containsAlphabet = rgularExp.containsAlphabet.test(str);
    expMatch.alphaNumeric = rgularExp.contains_alphaNumeric.test(str);

    expMatch.onlyNumbers = rgularExp.onlyNumbers.test(str);
    expMatch.onlyLetters = rgularExp.onlyLetters.test(str);
    expMatch.mixOfAlphaNumeric = rgularExp.onlyMixOfAlphaNumeric.test(str);

    return expMatch;
}

// HTML Element attribute's[id, name] with dynamic values.
var id1 = "Yash", id2="777", id3= "Yash777", id4= "Yash777Image4"
    id11= "image5.64", id22= "55-5.6", id33= "image_Yash", id44= "image-Yash"
    id12= "_-.";
console.log( "Only Letters:\n ", matchExpression(id1) );
console.log( "Only Numbers:\n ", matchExpression(id2) );
console.log( "Only Mix of Letters and Numbers:\n ", matchExpression(id3) );
console.log( "Only Mix of Letters and Numbers:\n ", matchExpression(id4) );

console.log( "Mixed with Special symbols" );
console.log( "Letters and Numbers :\n ", matchExpression(id11) );
console.log( "Numbers [-]:\n ", matchExpression(id22) );
console.log( "Letters :\n ", matchExpression(id33) );
console.log( "Letters [-]:\n ", matchExpression(id44) );

console.log( "Only Special symbols :\n ", matchExpression(id12) );

Đặt ra:

Only Letters:
  {containsNumber: false, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: true, mixOfAlphaNumeric: false}
Only Numbers:
  {containsNumber: true, containsAlphabet: false, alphaNumeric: true, onlyNumbers: true, onlyLetters: false, mixOfAlphaNumeric: false}
Only Mix of Letters and Numbers:
  {containsNumber: true, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: true}
Only Mix of Letters and Numbers:
  {containsNumber: true, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: true}
Mixed with Special symbols
Letters and Numbers :
  {containsNumber: true, containsAlphabet: true, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Numbers [-]:
  {containsNumber: true, containsAlphabet: false, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Letters :
  {containsNumber: false, containsAlphabet: true, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Letters [-]:
  {containsNumber: false, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Only Special symbols :
  {containsNumber: false, containsAlphabet: false, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}

Kết hợp mẫu java với biểu thức chính quy.


4

Để kiểm tra xem có bất kỳ char nào là số không mà không cần quá mức, để được điều chỉnh khi cần.

const s = "EMA618"

function hasInt(me){
  let i = 1,a = me.split(""),b = "",c = "";
  a.forEach(function(e){
   if (!isNaN(e)){
     console.log(`CONTAIN NUMBER «${e AT POSITION ${a.indexOf(e)} => TOTAL COUNT ${i}`)
     c += e
     i++
   } else {b += e}
  })
  console.log(`STRING IS «${b}», NUMBER IS «${c}»`)
  if (i === 0){
    return false
    // return b
  } else {
    return true
    // return +c
  }
}


hasInt(s)


2

Một cách để kiểm tra nó là lặp qua chuỗi và trả về true (hoặc false tùy thuộc vào những gì bạn muốn) khi bạn nhấn một số.

function checkStringForNumbers(input){
    let str = String(input);
    for( let i = 0; i < str.length; i++){
              console.log(str.charAt(i));
        if(!isNaN(str.charAt(i))){           //if the string is a number, do the following
            return true;
        }
    }
}

0

Bạn có thể làm điều này bằng cách sử dụng javascript. Không cần Jquery hoặc Regex

function isNumeric(n) {
  if(!isNaN(n))
    {
     return true
    }
  else
   {
    return false
   }
}

14
Quá mức cần thiết. Có thể chỉ làfunction isNumeric(n) { return !isNaN(n); }
Luca Steeb

Điều này cũng không kiểm tra xem BẤT K character ký tự nào là số. Nhưng tôi có thể nghĩ ra một giải pháp lấy cảm hứng từ điều này.
Tyler Lazenby

0

Mã này cũng giúp, "Để phát hiện các số trong chuỗi đã cho" khi các số được tìm thấy, nó dừng thực thi.

function hasDigitFind(_str_) {
  this._code_ = 10;  /*When empty string found*/
  var _strArray = [];

  if (_str_ !== '' || _str_ !== undefined || _str_ !== null) {
    _strArray = _str_.split('');
    for(var i = 0; i < _strArray.length; i++) {
      if(!isNaN(parseInt(_strArray[i]))) {
        this._code_ = -1;
        break;
      } else {
        this._code_ = 1;
      }
    }

  }
  return this._code_;
}

0

parseInt cung cấp số nguyên khi chuỗi bắt đầu bằng biểu diễn số nguyên:

(parseInt '1a')  is  1

..đương nhiên rồi:

isInteger = (s)->
  s is (parseInt s).toString()  and  s isnt 'NaN'

(isInteger 'a') is false
(isInteger '1a') is false
(isInteger 'NaN') is false
(isInteger '-42') is true

Xin thứ lỗi cho CoffeeScript của tôi.


-1

Bạn cũng có thể thử lodash:

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.