RegEx dla Javascript, aby zezwolić tylko na alfanumeryczny


237

Muszę znaleźć reg ex, który pozwala tylko na alfanumeryczny. Jak dotąd każdy, którego próbuję, działa tylko wtedy, gdy ciąg jest alfanumeryczny, co oznacza, że ​​zawiera zarówno literę, jak i cyfrę. Chcę tylko jednego, który by na to pozwolił i nie wymagał obu.

Odpowiedzi:


512
/^[a-z0-9]+$/i

^         Start of string
[a-z0-9]  a or b or c or ... z or 0 or 1 or ... 9
+         one or more times (change to * to allow empty string)
$         end of string    
/i        case-insensitive

Aktualizacja (obsługa uniwersalnych znaków)

jeśli potrzebujesz tego wyrażenia regularnego obsługuje znak uniwersalny, możesz tutaj znaleźć listę znaków znaków Unicode.

na przykład: /^([a-zA-Z0-9\u0600-\u06FF\u0660-\u0669\u06F0-\u06F9 _.-]+)$/

to będzie wspierać perski.


50
[az] nie pasuje do znaków międzynarodowych.
Eric Normand

23
Wow - nie sądzę, że kiedykolwiek do końca rozumiałem regex, dopóki nie został on podzielony w ten prosty sposób. Dzięki!
Matt Cashatt

Problem - bez / g zastępujesz dopasowania tylko przed zawijaniem wiersza.
Volomike,

5
innym sposobem byłoby, [^\W_]ale [a-z0-9]/ i jest oczywistym sposobem.
Vitim.us

36
@Greg, podoba mi się sposób, w jaki wyjaśniasz odpowiedzi związane z wyrażeniami regularnymi. Regeksy bez wyjaśnień, moim zdaniem, są w pewnym sensie bezużyteczne. Ponieważ dostajesz to jednorazowe „tak, to działa” i nagle, kiedy musisz to zmienić, wracasz z innym przypadkiem użycia, zamiast faktycznie uczyć się, co robi wyrażenie regularne . Ponadto łatwiej jest zrozumieć niż dokumentacja regularna: P
Chris Cirefice,

147

Jeśli chcesz zwrócić zastąpiony wynik, to zadziała:

var a = 'Test123*** TEST';
var b = a.replace(/[^a-z0-9]/gi,'');
console.log(b);

To zwróci:

Test123TEST

Zauważ, że gi jest konieczne, ponieważ oznacza globalne (nie tylko przy pierwszym dopasowaniu) i nie rozróżnia wielkości liter, dlatego mam az zamiast a-zA-Z. A ^ w nawiasach oznacza „cokolwiek poza tymi nawiasami”.

OSTRZEŻENIE: Alfanumeryczny jest świetny, jeśli właśnie tego chcesz. Ale jeśli używasz tego na rynku międzynarodowym jak na nazwisko lub obszar geograficzny, musisz wziąć pod uwagę znaki Unicode, czego to nie zrobi. Na przykład, jeśli masz nazwę taką jak „Âlvarö”, byłoby to „lvar”.


3
To świetna odpowiedź z wyjaśnieniem. Pamiętaj, aby zezwolić na spacje, jeśli ich potrzebujesz. .replace (/ [^ a-z0-9 \] / gi, '')
Joe Johnston,

82

Użyj słowa klasy znaków. Poniższe jest równoważne z ^[a-zA-Z0-9_]+$:

^\w+$

Wyjaśnienie:

  • ^ początek ciągu
  • \ w dowolny znak słowa (AZ, az, 0-9, _).
  • $ koniec łańcucha

Użyj, /[^\w]|_/gjeśli nie chcesz dopasowywać podkreślenia.


20
\ w jest faktycznie równoważne z [a-zA-Z_0-9], więc twoje RegEx również pasuje do podkreślników [_].
Martin Brown,

prawie alfanumeryczny wcale nie jest alfanumeryczny, ale dzięki twojemu ans bardzo mi pomógł
ajax333221

To prawda, nie jest to ścisła odpowiedź na opublikowane pytanie Q, ale dokładnie to, czego szukałem ...
prototyp

Przepraszamy, ale to nie pasuje do znaków międzynarodowych, takich jak Ę
Alex Mi

szkoda, że ​​usuwam moje akcenty
Miguel

38
/^([a-zA-Z0-9 _-]+)$/

powyższe wyrażenie regularne dopuszcza spacje w łańcuchu znaków i ogranicza znaki specjalne. Dopuszcza tylko az, AZ, 0-9, spację, podkreślenie i myślnik.


14
^\s*([0-9a-zA-Z]*)\s*$

lub, jeśli chcesz mieć co najmniej jeden znak:

^\s*([0-9a-zA-Z]+)\s*$

Nawiasy kwadratowe oznaczają zestaw znaków. ^ oznacza początek wprowadzania. $ jest końcem wprowadzania (lub znakiem nowej linii, w zależności od opcji). \ s jest spacją.

Biała spacja przed i po jest opcjonalna.

Nawiasy są operatorem grupowania, który pozwala wyodrębnić potrzebne informacje.

EDYCJA: usunąłem moje błędne użycie zestawu znaków \ ​​w.


6

Zamiast sprawdzać prawidłowy ciąg alfanumeryczny, można to osiągnąć pośrednio, sprawdzając ciąg pod kątem niepoprawnych znaków. Zrób to, sprawdzając wszystko, co pasuje do dopełnienia prawidłowego ciągu alfanumerycznego.

/[^a-z\d]/i    

Oto przykład:

var alphanumeric = "someStringHere";
var myRegEx  = /[^a-z\d]/i;
var isValid = !(myRegEx.test(alphanumeric));

Zwróć uwagę na operator logiczny not at isValid, ponieważ testuję, czy łańcuch jest fałszywy, a nie czy jest poprawny.


6

To zadziała

^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$

Akceptuje tylko znaki alfanumeryczne:
przypadki testowe zawieszone:

dGgs1s23 - valid
12fUgdf  - valid,
121232   - invalid, 
abchfe   - invalid,
 abd()*  - invalid, 
42232^5$ - invalid

lub

Możesz także spróbować tego. wyrażenie to spełniało co najmniej jedną cyfrę i jeden znak oraz żadnych innych znaków specjalnych

^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$

w kącie może testować jak:

$scope.str = '12fUgdf';
var pattern = new RegExp('^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$');
$scope.testResult = pattern.test($scope.str);

DEMO PLUNKERA

Odwołano: Wyrażenie regularne dla alfanumerycznego w Angularjs


4

Rozszerz prototyp łańcucha, aby mógł być używany w całym projekcie

    String.prototype.alphaNumeric = function() {
        return this.replace(/[^a-z0-9]/gi,'');
    }

Stosowanie:

    "I don't know what to say?".alphaNumeric();
    //Idontknowwhattosay

3

Wprowadź te kody do SCRATCHPAD i zobacz akcję.

var str=String("Blah-Blah1_2,oo0.01&zz%kick").replace(/[^\w-]/ig, '');

2

Wygląda na to, że wielu użytkowników zauważyło, że te wyrażenia regularne prawie na pewno zawiodą, chyba że będziemy ściśle pracować w języku angielskim. Myślę jednak, że istnieje prosty sposób, który nie byłby tak ograniczony.

  1. zrób kopię swojego ciągu we wszystkich LITERACH
  2. zrób drugą kopię małymi literami

Wszelkie znaki pasujące do tych ciągów zdecydowanie nie mają charakteru alfabetycznego.

let copy1 = originalString.toUpperCase();
let copy2 = originalString.toLowerCase();
for(let i=0; i<originalString.length; i++) {
    let bIsAlphabetic = (copy1[i] != copy2[i]);
}

Opcjonalnie możesz także wykryć cyfry, szukając cyfr od 0 do 9.


2

Spróbuj ... Zamień swój identyfikator pola na #nazwa ... az (od a do z), AZ (od A do Z), 0-9 (od 0 do 9)

jQuery(document).ready(function($){
    $('#name').keypress(function (e) {
        var regex = new RegExp("^[a-zA-Z0-9\s]+$");
        var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
        if (regex.test(str)) {
            return true;
        }
        e.preventDefault();
        return false;
    });
});

2

JAVASCRIPT, aby akceptować tylko NUMERY, ALFABETY i SPECJALNE CHARECTERS

document.getElementById("onlynumbers").onkeypress = function (e) {
	onlyNumbers(e.key, e)
};

document.getElementById("onlyalpha").onkeypress = function (e) {
	onlyAlpha(e.key, e)
};

document.getElementById("speclchar").onkeypress = function (e) {
	speclChar(e.key, e)
};

function onlyNumbers(key, e) {
	var letters = /^[0-9]/g; //g means global
	if (!(key).match(letters)) e.preventDefault();
}

function onlyAlpha(key, e) {
	var letters = /^[a-z]/gi; //i means ignorecase
	if (!(key).match(letters)) e.preventDefault();
}

function speclChar(key, e) {
	var letters = /^[0-9a-z]/gi;
	if ((key).match(letters)) e.preventDefault();
}
<html>
   <head></head>
   <body>
      Enter Only Numbers: 
      <input id="onlynumbers" type="text">
      <br><br>
      Enter Only Alphabets: 
      <input id="onlyalpha" type="text" >
      <br><br>
      Enter other than Alphabets and numbers like special characters: 
      <input id="speclchar" type="text" >
   </body>
</html>


1

Nawet lepiej niż Gayan Dissanayakezaznaczono.

/^[-\w\s]+$/

Teraz ^[a-zA-Z0-9]+$może być reprezentowany jako^\w+$

Możesz użyć \ s zamiast spacji. Pamiętaj, że \ s zajmuje się białymi znakami, a nie tylko jedną spacją.


1

Mam ciąg podobny do Samsung Galaxy A10s 6.2-calowy (2 GB, 32 GB ROM) Android 9.0, (13MP + 2MP) + 8MP Dual SIM 4000mAh 4G LTE Smartphone - czarny (BF19)

Poniżej zrobiłem:

string.replace(/[^a-zA-Z0-9 ,._-]/g, '').split(',').join('-').split(' ').join('-').toLowerCase()

Zauważ, że pozwoliłem ,._-następnie użyć split()i join()do zamiany ,na -i spacji do- odpowiednio.

W końcu dostałem coś takiego: samsung-galaxy-a10s-6.2-inch-2gb-32gb-rom-android-9.0-13mp-2mp-8mp-dual-sim-4000mah-4g-lte-smartphone-black-bf19-20tego właśnie chciałem.

Być może jest lepsze rozwiązanie, ale dla mnie to działa dobrze.


0

Zapisz tę stałą

const letters = /^[a-zA-Z0-9]+$/

teraz do sprawdzania części użyj .match ()

const string = 'Hey there...' // get string from a keyup listner
let id = ''
// iterate through each letters
for (var i = 0; i < string.length; i++) {
  if (string[i].match(letters) ) {
    id += string[i]
  } else {
    // In case you want to replace with something else
    id += '-'  
  }
}
return id

-1

Jquery akceptuje tylko NUMERY, ALFABETY i SPECJALNE ŁADUNKI

<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>

<body>
Enter Only Numbers: 
<input type="text" id="onlynumbers">
<br><br>
Enter Only Alphabets: 
<input type="text" id="onlyalpha">
<br><br>
Enter other than Alphabets and numbers like special characters: 
<input type="text" id="speclchar">

<script>
    $('#onlynumbers').keypress(function(e) {
      var letters=/^[0-9]/g; //g means global
      if(!(e.key).match(letters)) e.preventDefault();
	});
    
    $('#onlyalpha').keypress(function(e) {
      var letters=/^[a-z]/gi; //i means ignorecase
      if(!(e.key).match(letters)) e.preventDefault();
	});
    
    $('#speclchar').keypress(function(e) {
      var letters=/^[0-9a-z]/gi; 
      if((e.key).match(letters)) e.preventDefault();
	});
    </script>
</body>
</html>

**JQUERY to accept only NUMBERS , ALPHABETS and SPECIAL CHARACTERS **


<!DOCTYPE html>
    $('#onlynumbers').keypress(function(e) {
      var letters=/^[0-9]/g; //g means global
      if(!(e.key).match(letters)) e.preventDefault();
    });

    $('#onlyalpha').keypress(function(e) {
      var letters=/^[a-z]/gi; //i means ignorecase
      if(!(e.key).match(letters)) e.preventDefault();
    });

    $('#speclchar').keypress(function(e) {
      var letters=/^[0-9a-z]/gi; 
      if((e.key).match(letters)) e.preventDefault();
    });
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"> 

Wprowadź tylko cyfry:

Wprowadź tylko alfabety:

Wprowadź inne niż alfabety i cyfry, takie jak znaki specjalne:

</body>
</html>

1
jquery nie jest javascript
rsm

Tak. Dzięki powyższy kod działa, możesz to sprawdzić, klikając polecenie Uruchom fragment kodu.
Pranav Bhat

jquery to biblioteka javascript
Pranav Bhat

możemy użyć jquery zamiast javascript, to będzie łatwe :)
Pranav Bhat

Jestem Sorrry, masz rację .. Napisałem kolejny z javascript! Wielkie dzięki!
Pranav Bhat
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.