Kiểm tra xem một chuỗi có khoảng trắng không


95

Tôi đang cố gắng kiểm tra xem một chuỗi có khoảng trắng hay không . Tôi đã tìm thấy chức năng này nhưng có vẻ như nó không hoạt động:

function hasWhiteSpace(s) 
{
    var reWhiteSpace = new RegExp("/^\s+$/");

    // Check for white space
    if (reWhiteSpace.test(s)) {
        //alert("Please Check Your Fields For Spaces");
        return false;
    }

    return true;
}

Nhân tiện, tôi đã thêm dấu ngoặc kép vào RegExp.

Có điều gì sai không? Có điều gì tốt hơn mà tôi có thể sử dụng? Hy vọng rằng JQuery.


logic của bạn là ngược, đúng có nghĩa là sai.
Brian Schroth

2
Bạn đang trả về false nếu chuỗi có khoảng trắng, logic của bạn ngược lại
Christopher Francisco

Regex trong câu hỏi đó kiểm tra các mẫu chỉ có khoảng trắng trong chuỗi, bắt đầu bằng khoảng trắng, có một hoặc nhiều khoảng trắng và kết thúc bằng khoảng trắng.
Priya Ranjan Singh

Câu trả lời:


240

Bạn chỉ cần sử dụng phương thức indexOf trên chuỗi đầu vào:

function hasWhiteSpace(s) {
  return s.indexOf(' ') >= 0;
}

Hoặc bạn có thể sử dụng phương pháp kiểm tra, trên RegEx đơn giản:

function hasWhiteSpace(s) {
  return /\s/g.test(s);
}

Thao tác này cũng sẽ kiểm tra các ký tự khoảng trắng khác như Tab.


17
điều này không kiểm tra các loại khoảng trắng khác (ví dụ: \ t).
Bernard Chen

3
bạn cũng không thể nhập s.indexOf (/ ^ \ s + $ /)?
Zoidberg

2
điều này không được hỗ trợ bởi IE8 (chỉ là một fyi thân thiện ...)
ảm đạm.penguin

@ CMS & @Bernard - Không hoạt động [s.indexOf ('') hoạt động]
Shawn Rebelo

21

Regex của bạn sẽ không khớp với bất cứ thứ gì, như nó vốn có. Bạn chắc chắn cần loại bỏ các dấu ngoặc kép - các "/"ký tự là đủ.

/^\s+$/đang kiểm tra xem chuỗi có phải là TẤT CẢ khoảng trắng hay không:

  • ^ khớp với phần bắt đầu của chuỗi.
  • \s+ có nghĩa là ít nhất 1, có thể nhiều hơn, dấu cách.
  • $ khớp với phần cuối của chuỗi.

Hãy thử thay thế regex bằng /\s/(và không có dấu ngoặc kép)


1

Hàm này kiểm tra các loại khoảng trắng khác, không chỉ khoảng trắng (tab, ký tự xuống dòng, v.v.)

import some from 'lodash/fp/some'
const whitespaceCharacters = [' ', '  ',
  '\b', '\t', '\n', '\v', '\f', '\r', `\"`, `\'`, `\\`,
  '\u0008', '\u0009', '\u000A', '\u000B', '\u000C',
'\u000D', '\u0020','\u0022', '\u0027', '\u005C',
'\u00A0', '\u2028', '\u2029', '\uFEFF']
const hasWhitespace = char => some(
  w => char.indexOf(w) > -1,
  whitespaceCharacters
)

console.log(hasWhitespace('a')); // a, false
console.log(hasWhitespace(' ')); // space, true
console.log(hasWhitespace(' ')); // tab, true
console.log(hasWhitespace('\r')); // carriage return, true

Nếu bạn không muốn sử dụng Lodash , thì đây là một sometriển khai đơn giản với 2 s:

const ssome = (predicate, list) =>
{
  const len = list.length;
  for(const i = 0; i<len; i++)
  {
    if(predicate(list[i]) === true) {
      return true;
    }
  }
  return false;
};

Sau đó chỉ cần thay thế somebằng ssome.

const hasWhitespace = char => some(
  w => char.indexOf(w) > -1,
  whitespaceCharacters
)

Đối với những người trong Node, hãy sử dụng:

const { some } = require('lodash/fp');

0

Đây là xác thực được đề xuất của tôi:

var isValid = false;

// Check whether this entered value is numeric.
function checkNumeric() {
    var numericVal = document.getElementById("txt_numeric").value;

    if(isNaN(numericVal) || numericVal == "" || numericVal == null || numericVal.indexOf(' ') >= 0) {
        alert("Please, enter a numeric value!");
        isValid = false;
    } else {
        isValid = true;
    }
}

0

Một cách tiếp cận đơn giản mà bạn có thể thực hiện là so sánh độ dài của chuỗi gốc với độ dài của chuỗi để có khoảng trắng được thay thế bằng không. Ví dụ:

function hasWhiteSpaces(string) {
    if (string.length == string.replace(" ", "").length) {return false}
    return true
}

0

Với việc bổ sung ngôn ngữ, việc này sẽ dễ dàng hơn nhiều, ngoài ra bạn có thể tận dụng lợi thế của việc quay lại sớm:

// Use includes method on string
function hasWhiteSpace(s) {
  const whitespaceChars = [' ', '\t', '\n'];
  return whitespaceChars.some(char => s.includes(char));
}

// Use character comparison
function hasWhiteSpace(s) {
  const whitespaceChars = [' ', '\t', '\n'];
  return Array.from(s).some(char => whitespaceChars.includes(char));
}

const withSpace = "Hello World!";
const noSpace = "HelloWorld!";

console.log(hasWhiteSpace(withSpace));
console.log(hasWhiteSpace(noSpace));

console.log(hasWhiteSpace2(withSpace));
console.log(hasWhiteSpace2(noSpace));

Tôi đã không chạy điểm chuẩn hiệu suất nhưng chúng sẽ nhanh hơn regex nhưng đối với các đoạn văn bản nhỏ thì sẽ không có nhiều sự khác biệt như vậy.


0

Một số người khác đã đăng câu trả lời. Có một số vấn đề rõ ràng, như nó trả về falsekhi Regex đi qua, và toán tử ^and $chỉ ra bắt đầu / kết thúc, trong khi câu hỏi đang tìm kiếm có (bất kỳ) khoảng trắng nào và không: chỉ chứa khoảng trắng (mà regex đang kiểm tra).

Bên cạnh đó, vấn đề chỉ là một lỗi đánh máy.

Thay đổi điều này...

var reWhiteSpace = new RegExp("/^\s+$/");

Tới đây ...

var reWhiteSpace = new RegExp("\\s+");

Khi sử dụng regex bên trong RegExp(), bạn phải thực hiện hai điều sau ...

  • Bỏ qua /dấu ngoặc bắt đầu và kết thúc .
  • Thoát kép tất cả mã trình tự, tức là, \\sthay cho\s , v.v.

Bản demo làm việc đầy đủ từ mã nguồn ....

$(document).ready(function(e) { function hasWhiteSpace(s) {
        var reWhiteSpace = new RegExp("\\s+");
    
        // Check for white space
        if (reWhiteSpace.test(s)) {
            //alert("Please Check Your Fields For Spaces");
            return 'true';
        }
    
        return 'false';
    }
  
  $('#whitespace1').html(hasWhiteSpace(' '));
  $('#whitespace2').html(hasWhiteSpace('123'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
" ": <span id="whitespace1"></span><br>
"123": <span id="whitespace2"></span>

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.