web-dev-qa-db-fra.com

'IsNullOrWhitespace' en JavaScript?

Existe-t-il un équivalent JavaScript du code String.IsNullOrWhitespace de .NET afin que je puisse vérifier si une zone de texte côté client contient du texte visible?

Je préférerais commencer par le côté client plutôt que de publier la valeur de la zone de texte et ne compter que sur la validation côté serveur, même si je le ferai également.

47
Scott

Il est assez facile de rouler le vôtre :

function isNullOrWhitespace( input ) {

    if (typeof input === 'undefined' || input == null) return true;

    return input.replace(/\s/g, '').length < 1;
}
65
Dexter

Pour une implémentation multi-navigateur moderne et succincte, il suffit de faire:

function isNullOrWhitespace( input ) {
  return !input || !input.trim();
}

Voici le jsFiddle . Notes ci-dessous.


La réponse actuellement acceptée peut être simplifiée comme suit:

function isNullOrWhitespace( input ) {
  return (typeof input === 'undefined' || input == null)
    || input.replace(/\s/g, '').length < 1;
}

Et en tirant parti de la fausseté, encore plus loin pour:

function isNullOrWhitespace( input ) {
  return !input || input.replace(/\s/g, '').length < 1;
}

trim () est disponible dans tous les navigateurs récents , nous pouvons donc éventuellement supprimer l'expression régulière:

function isNullOrWhitespace( input ) {
  return !input || input.trim().length < 1;
}

Et ajoutez un peu plus de fausseté au mélange, donnant la version finale (simplifiée):

function isNullOrWhitespace( input ) {
  return !input || !input.trim();
}
48
user4942583

non, mais tu pourrais en écrire un

function isNullOrWhitespace( str )
{
  // Does the string not contain at least 1 non-whitespace character?
  return !/\S/.test( str );
}
2
Peter Bailey

Essayez ceci 

/**
  * Checks the string if undefined, null, not typeof string, empty or space(s)
  * @param {any} str string to be evaluated
  * @returns {boolean} the evaluated result
*/
function isStringNullOrWhiteSpace(str) {
    return str === undefined || str === null
                             || typeof str !== 'string'
                             || str.match(/^ *$/) !== null;
}

Vous pouvez l'utiliser comme ça 

isStringNullOrWhiteSpace('Your String');
0
Rod lauro Romarate

En tirant les parties pertinentes des deux meilleures réponses, vous obtenez quelque chose comme ceci:

function IsNullOrWhitespace(input) {
    if (typeof input === 'undefined' || input == null) return true;
    return !/\S/.test(input); // Does it fail to find a non-whitespace character?
}

Le reste de cette réponse ne concerne que les personnes intéressées par les différences de performances entre cette réponse et celle de Dexter. Les deux produiront les mêmes résultats, mais ce code est légèrement plus rapide. 

Sur mon ordinateur, en utilisant un test QUnit sur le code suivant:

var count = 100000;
var start = performance.now();
var str = "This is a test string.";
for (var i = 0; i < count; ++i) {
    IsNullOrWhitespace(null);
    IsNullOrWhitespace(str);
}
var end = performance.now();
var elapsed = end - start;
assert.ok(true, "" + count + " runs of IsNullOrWhitespace() took: " + elapsed + " milliseconds.");

Les résultats ont été:

  • Méthode RegExp.replace = 33 - 37 millisecondes
  • Méthode RegExp.test = 11 - 14 millisecondes
0
John Fisher

Vous pouvez utiliser le regex /\S/ pour vérifier si un champ est un espace, et le combiner avec une vérification nulle.

Ex:

if(textBoxVal === null || textBoxVal.match(/\S/)){
    // field is invalid (empty or spaces)
}
0
McStretch

trim() est une fonction chaîne utile qui manque à JS. 

Ajoutez le:

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,"") }

Puis: if (document.form.field.value.trim() == "")

0
T4NK3R

Vous devez écrire le vôtre:

function isNullOrWhitespace(strToCheck) {
    var whitespaceChars = "\s";
    return (strToCheck === null || whitespaceChars.indexOf(strToCheck) != -1);
}
0
smas