Quiero saber si una cadena comienza con el carácter especificado/o la cadena termina con ella en jQuery.

Por Ejemplo:

var str = 'Hello World';

if( str starts with 'Hello' ) {
   alert('true');
} else {
   alert('false');
}

if( str ends with 'World' ) {
   alert('true');
} else {
   alert('false');
}

Si no hay ninguna función, a continuación, alguna alternativa ?

  • El uso de ES6 nuevas características
  • Sí, bueno, o no utilizar ES6 sin embargo, si tiene usuarios que el uso de IE mayores de Borde.
InformationsquelleAutor Naveed | 2010-09-15

6 Comentarios

  1. 377

    Una opción es el uso de expresiones regulares:

    if (str.match("^Hello")) {
       //do this if begins with Hello
    }
    
    if (str.match("World$")) {
       //do this if ends in world
    }
    • en jQuery traté de str.startsWith(‘algunos comprobación de la cadena ..’) esto me dio un error diciendo, startsWith método no encontrado.. 🙁 pero str.partido trabajado. Gracias por tu respuesta
    • Sólo tenga cuidado de que la cadena está inspeccionando no contiene ningún regex caracteres reservados.
    • Pasar un objeto de regex en lugar de una expresión de cadena que parece resolver el problema de @nokturnal menciona: str.match(/^Hello/) Pero la forma /regex/.test(str) es aún mejor para este caso en particular, por stackoverflow.com/questions/10940137/…
    • Esto volvería cadena coincidente, pero no el valor booleano.
    • var isUnavailable = $("#StatusId option:selected").text().match("^Unavailable - "); – ¿por qué esta devolver null si la opción seleccionada es «no Disponible – Otros» ?
  2. 92

    Para startswith, puede utilizar indexOf:

    if(str.indexOf('Hello') == 0) {

    ref

    y usted puede hacer las matemáticas basado en la longitud de la cadena para determinar ‘endswith’.

    if(str.lastIndexOf('Hello') == str.length - 'Hello'.length) {
    • puede que desee utilizar lastIndexOf() para la endswith 😉
    • Cuidado, IndexOf no es Compatible con IE8 Navegador. Mismo con lastIndexOf.
    • Pido disculpas por la confusión. Me estaba refiriendo a la Matriz.el prototipo.indexOf() que es compatible únicamente con iE9+, y no de la Cadena.el prototipo.indexOf() que el IE4+
    • Una manera mucho más segura de la respuesta que el uso de expresiones regulares para un caso de uso sencillo. Probablemente debería ser aceptado respuesta.
    • El código para ‘endswith’ es defectuoso. Cuando la comprobación de una cadena que no aparecen en la cadena y que tiene la longitud = (word – 1). E. g. ("1234".lastIndexOf('Hello') == "1234".length - 'Hello'.length) resultados en true.
  3. 23

    No hay necesidad de jQuery para hacer eso. Podría código jQuery, contenedor, pero sería inútil, así que lo mejor será utilizar

    var str = "Hello World";
    
    window.alert("Starts with Hello ? " + /^Hello/i.test(str));        
    
    window.alert("Ends with Hello ? " + /Hello$/i.test(str));

    como el método match() está en desuso.

    PS : el «yo» de la bandera en RegExp es opcional y representa entre mayúsculas y minúsculas (por lo que también devolver true para «hola», «hola», etc.).

    • +1 Gracias por incluir el caso de «insensible» parte.
    • Se puede proporcionar un enlace a la documentación de match() va a quedar en desuso? Una rápida búsqueda en Google no devuelve nada.
    • He leído que en línea hace un par de años, me temo que no puedo encontrar el lugar exacto ya.
  4. 15

    Usted realmente no necesita jQuery para tales tareas. En la ES6 especificación que ya han salido de la caja de los métodos de startsWith y endsWith.

    var str = "To be, or not to be, that is the question.";
    alert(str.startsWith("To be"));         //true
    alert(str.startsWith("not to be"));     //false
    alert(str.startsWith("not to be", 10)); //true
    
    var str = "To be, or not to be, that is the question.";
    alert( str.endsWith("question.") );  //true
    alert( str.endsWith("to be") );      //false
    alert( str.endsWith("to be", 19) );  //true

    Actualmente disponible en FF y Chrome. Para los navegadores antiguos puede utilizar su polyfills o substr

  5. 9

    Siempre se puede extender String prototipo como este:

    // Checks that string starts with the specific string
    if (typeof String.prototype.startsWith != 'function') {
        String.prototype.startsWith = function (str) {
            return this.slice(0, str.length) == str;
        };
    }
    
    // Checks that string ends with the specific string...
    if (typeof String.prototype.endsWith != 'function') {
        String.prototype.endsWith = function (str) {
            return this.slice(-str.length) == str;
        };
    }

    Y utilizarlo como este:

    var str = 'Hello World';
    
    if( str.startsWith('Hello') ) {
       //your string starts with 'Hello'
    }
    
    if( str.endsWith('World') ) {
       //your string ends with 'World'
    }
  6. 2

    ES6 ahora es compatible con el startsWith() y endsWith() método para la comprobación de comienzo y fin de la strings. Si usted desea apoyar pre-es6 motores, usted puede ser que desee considerar la adición de uno de los métodos sugeridos para la String prototipo.

    if (typeof String.prototype.startsWith != 'function') {
      String.prototype.startsWith = function (str) {
        return this.match(new RegExp("^" + str));
      };
    }
    
    if (typeof String.prototype.endsWith != 'function') {
      String.prototype.endsWith = function (str) {
        return this.match(new RegExp(str + "$"));
      };
    }
    
    var str = "foobar is not barfoo";
    console.log(str.startsWith("foob"); //true
    console.log(str.endsWith("rfoo");   //true
    • Cualquier cadena que contiene caracteres que deben ser escapado para el uso en una expresión regular (por ejemplo ()[].) romper su relleno métodos. Usted necesita para preparar las cuerdas con un regex-función de escape. O mejor aún: el Uso de una batalla probado relleno de core-js

Dejar respuesta

Please enter your comment!
Please enter your name here