जांचें कि क्या किसी स्ट्रिंग में सफेद स्थान है


96

मैं यह जांचने की कोशिश कर रहा हूं कि क्या एक स्ट्रिंग में सफेद स्थान है । मुझे यह फ़ंक्शन मिला लेकिन यह काम नहीं कर रहा है:

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;
}

वैसे, मैंने उद्धरण जोड़े RegExp

क्या वहाँ कुछ गड़बड़ है? क्या कुछ बेहतर है जो मैं उपयोग कर सकता हूं? उम्मीद है कि JQuery


आपका तर्क पीछे की ओर है, सही का अर्थ असत्य है।
ब्रायन श्रॉथ

2
यदि आप व्हाट्सएप पर झूठ बोल रहे हैं, तो आपका तर्क पीछे आ रहा है
क्रिस्टोफर फ्रांसिस्को

उस आवेश में केवल आवेशों के साथ पैटर्न की जाँच में regex, व्हॉट्सएप से शुरू होता है, जिसमें एक या अधिक व्हाट्सएप होता है, और एक व्हाट्सएप के साथ समाप्त होता है।
प्रिया रंजन सिंह

जवाबों:


241

आप बस इनपुट स्ट्रिंग पर indexOf विधि का उपयोग कर सकते हैं :

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

या आप एक साधारण RegEx पर परीक्षण विधि का उपयोग कर सकते हैं:

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

यह अन्य सफेद अंतरिक्ष वर्ण जैसे टैब के लिए भी जाँच करेगा।


18
यह अन्य प्रकार के सफेद स्थान की जाँच नहीं करता है (उदाहरण के लिए, \ t)।
बर्नार्ड चेन

3
क्या आप s.indexOf (/ ^ \ s + $ /) में भी नहीं डाल सकते?
ज़ोएडबर्ग

2
यह IE8 (सिर्फ एक अनुकूल
फी

@ CMS & @Bernard - काम नहीं करता [s.indexOf ('') काम करता है]
Shawn Rebelo

21

आपका रेगेक्स कुछ भी मेल नहीं खाएगा, जैसा कि यह है। आपको निश्चित रूप से उद्धरण हटाने की आवश्यकता है - "/"वर्ण पर्याप्त हैं।

/^\s+$/जाँच रहा है कि क्या स्ट्रिंग सभी व्हाट्सएप है:

  • ^ स्ट्रिंग की शुरुआत से मेल खाता है।
  • \s+ कम से कम 1 का अर्थ है, संभवतः अधिक, रिक्त स्थान।
  • $ स्ट्रिंग के अंत से मेल खाता है।

Regex को बदलने का प्रयास करें /\s/(और कोई उद्धरण नहीं)


1

यह फ़ंक्शन अन्य प्रकार के व्हाट्सएप की जांच करता है, न कि केवल स्थान (टैब, कैरिज रिटर्न, आदि)।

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

यदि आप लोडश का उपयोग नहीं करना चाहते हैं , तो यहां some2 के साथ एक सरल कार्यान्वयन है 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;
};

तो बस के someसाथ बदलें ssome

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

नोड में उन लोगों के लिए, का उपयोग करें:

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

0

यहाँ मेरा सुझाया गया सत्यापन है:

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

एक साधारण तरीका जो आप अपना सकते हैं, वह यह है कि मूल स्ट्रिंग की लंबाई की तुलना स्ट्रिंग के साथ करने के लिए व्हाट्सएप की जगह कुछ भी नहीं है। उदाहरण के लिए:

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

0

भाषा में परिवर्धन के साथ यह बहुत आसान है, साथ ही आप जल्दी वापसी का लाभ उठा सकते हैं:

// 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));

मैंने प्रदर्शन बेंचमार्क नहीं चलाया लेकिन ये रेगेक्स की तुलना में तेज़ होना चाहिए लेकिन छोटे पाठ स्निपेट के लिए वैसे भी इतना अंतर नहीं होगा।


0

कुछ अन्य लोगों ने उत्तर दिए हैं। कुछ स्पष्ट समस्याओं जैसे कि यह देता है, कर रहे हैं falseजब Regex गुजरता है, और ^और $ऑपरेटरों शुरू / अंत का संकेत मिलता है, जबकि सवाल है (किसी भी) खाली स्थान के लिए लग रही है, और नहीं: केवल शामिल खाली स्थान के लिए (जो regex जाँच कर रहा है)।

इसके अलावा, मुद्दा सिर्फ एक टाइपो है।

इसे बदलो...

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

इसके लिए...

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

जब एक regex का उपयोग कर रहे हैं RegExp(), तो आपको निम्नलिखित दो काम करना चाहिए ...

  • /कोष्ठक प्रारंभ और समाप्त करना ।
  • सभी अनुक्रम कोड को दोहराएं, अर्थात, \\sके स्थान पर \s, आदि।

सोर्स कोड से फुल वर्किंग डेमो…।

$(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>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.