Espressione regolare alfanumerica, trattino e trattino basso ma senza spazi controlla JavaScript


92

Tentativo di confrontare l'input con un'espressione regolare.

Il campo deve consentire solo caratteri alfanumerici, trattini e trattini bassi e NON deve consentire spazi.

Tuttavia, il codice seguente consente spazi.

Cosa mi manca?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }

5
Mi piace la risposta di Andy E qui sotto. Inoltre, potresti voler controllare gskinner.com/RegExr per modificare rapidamente le espressioni regolari . È ... piuttosto dolce.
pixelbobby

Risposte:


155

Tuttavia, il codice seguente consente spazi.

No, non è così. Tuttavia, corrisponderà solo all'input con una lunghezza di 1. Per gli input con una lunghezza maggiore o uguale a 1, è necessaria una +seguente classe di caratteri:

var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) === -1)
    { alert('invalid'); }
else
    { alert('valid'); }

Nota che né il -(in questo caso) né la _necessità di escape.


16

Non dovresti usare String.match ma RegExp.prototype.test (cioè /abc/.test("abcd")) invece di String.search () se sei interessato solo a un valore booleano. Devi anche ripetere la classe del tuo personaggio come spiegato nella risposta di Andy E:

var regexp = /^[a-zA-Z0-9-_]+$/;

8
In realtà, dovresti usare il RegExp.prototype.testmetodo se sei interessato solo a un booleano.
Andy E

7

Questa sintassi è un po 'più concisa delle risposte che sono state pubblicate fino a questo punto e ottiene lo stesso risultato:

let regex = /^[\w-]+$/;

1
Considera l'idea di aggiungere una nota che la tua risposta funziona anche per i caratteri internazionali. Non sono sicuro di JavaScript, ma in bash funziona: ʻecho "abc-def däf_ghi" | egrep -wo '(\ w | - | _) +'
Ivan Ogai

4

Hai uno stupido errore. Quindi pubblica qui, se qualcuno lo trova utile

  1. -\._ - significa trattino, punto e trattino basso
  2. \.-_ - indica tutti i segni nell'intervallo dal punto al trattino basso

# 2 si applica solo se è racchiuso tra parentesi quadre, ad esempio [\.-_] È un carattere compreso tra un punto e un trattino basso. Ma senza le parentesi quadre, entrambi sono una sequenza di tre simboli e differiscono solo nell'ordine.
eretto il

1

Non sfuggire al trattino basso. Potrebbe causare un po 'di whackness.


1
Perché dici questo? So che il carattere di sottolineatura non ha bisogno di essere evitato, ma non ho mai sentito parlare di \_causare problemi, in JavaScript o in qualsiasi altro sapore regex.
Alan Moore

1
Pura speculazione. Altrimenti l'espressione sembrava a posto e in ogni caso non avrebbe dovuto corrispondere agli spazi, ma l'ho semplicemente buttata fuori. Probabilmente avrebbe dovuto essere un commento, non una risposta.
David Fells


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.