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.