Javascript için RegEx yalnızca alfasayısal değerlere izin verir


237

Sadece alfasayısal izin veren bir reg bulmak gerekir. Şimdiye kadar, denediğim herkes sadece dize alfasayısal ise, yani hem bir harf hem de bir sayı içeriyorsa çalışır. Sadece ikisine de izin veren ve ikisini de gerektirmeyen bir tane istiyorum.

Yanıtlar:


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

Güncelleme (evrensel karakterleri destekliyor)

Eğer bu regexp evrensel karakteri destekliyorsa , burada unicode karakterlerin listesini bulabilirsiniz .

Örneğin: /^([a-zA-Z0-9\u0600-\u06FF\u0660-\u0669\u06F0-\u06F9 _.-]+)$/

bu farsçaları destekleyecektir.


50
[az] uluslararası karakterlerle eşleşmiyor.
Eric Normand

23
Vay canına - bu basit şekilde parçalanana kadar normal ifadeyi tamamen anladığımı sanmıyorum. Teşekkürler!
Matt Cashatt

Sorun - / g olmadan, yalnızca bir satır kaydırmadan önce eşleşmeleri değiştirirsiniz.
Volomike

5
başka bir yol olurdu [^\W_]ama [a-z0-9]/ i bariz bir yoldur.
Vitim.us

36
@Greg, regex ile ilgili cevaplarınızı nasıl açıkladığınızdan memnunum. Bence açıklama yapılmayan regexes, işe yaramaz. Eğer bunun yerine aslında regex neyi öğrenme, farklı bir kullanım örneği ile sağ arka gelip bunu değiştirmek gerektiğinde tek seferlik, aniden "evet çalıştığını" ve almak için yapar . Ayrıca, normal ifadelerden daha kolay anlaşılırsınız: P
Chris Cirefice

147

Değiştirilen bir sonucu döndürmek istiyorsanız, bu işe yarar:

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

Bu geri dönecektir:

Test123TEST

Gi'nin gerekli olduğunu unutmayın çünkü küresel (sadece ilk maçta değil) ve büyük / küçük harfe duyarlı değil, bu yüzden a-zA-Z yerine az var. Ve parantez içindeki ^ "bu parantez içinde olmayan herhangi bir şey" anlamına gelir.

UYARI: Alfasayısal, tam olarak istediğiniz şeyse harikadır. Ancak bunu uluslararası bir pazarda bir kişinin adı veya coğrafi bölge gibi kullanıyorsanız, unicode karakterleri hesaba katmanız gerekir; Örneğin, "varlvarö" gibi bir adınız varsa, bunu "lvar" yapar.


3
Bu açıklama ile harika bir cevap. İhtiyacınız olursa boşluklara izin vermeyi unutmayın. .replace (/ [^ a-z0-9 \] / gi, '')
Joe Johnston

82

Karakter sınıfı kelimesini kullanın. Aşağıdakiler a'ya eşdeğerdir ^[a-zA-Z0-9_]+$:

^\w+$

Açıklama:

  • ^ dizenin başlangıcı
  • \ w herhangi bir kelime karakteri (AZ, az, 0-9, _).
  • $ dizenin sonu

Kullanın /[^\w]|_/gEğer alt çizgi maç için istemiyorsanız.


20
\ w aslında [a-zA-Z_0-9] ile eşdeğerdir, bu nedenle RegEx'iniz alt çizgi [_] ile de eşleşir.
Martin Brown

neredeyse alfasayısal hiç alfasayısal değil, ama teşekkürler ve ans bana çok yardımcı oldu
ajax333221

Doğru, yayınlandığı gibi Q'ya katı bir cevap değil, ama tam olarak aradığım şey ..
prototip

Üzgünüz, ama bu uluslararası karakterler ile eşleşmiyor, örneğin
Alex

çok kötü bu aksanlarımı kaldırmak
Miguel

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

Yukarıdaki normal ifade bir dize kenarındaki boşluklara izin verir ve özel karakterleri kısıtlar.


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

veya en az bir karakter istiyorsanız:

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

Köşeli ayraçlar bir dizi karakteri belirtir. ^ giriş başlangıcıdır. $ girişin sonu (veya seçeneklerinize bağlı olarak yeni satır). \ s boşluktur.

Öncesi ve sonrası boşluk isteğe bağlıdır.

Parantezler, istediğiniz bilgileri ayıklamanıza olanak tanıyan gruplama operatörüdür.

EDIT: \ w karakter kümesi hatalı kullanımımı kaldırıldı.


6

Geçerli bir alfasayısal dizeyi denetlemek yerine, dizeyi geçersiz karakterler olup olmadığını denetleyerek dolaylı olarak başarabilirsiniz. Bunu , geçerli alfasayısal dizenin tamamlayıcısıyla eşleşen herhangi bir şey olup olmadığını kontrol ederek yapın .

/[^a-z\d]/i    

İşte bir örnek:

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

isValidBen mantıksal değil operatör dikkat edin, ben dize yanlış olup olmadığını, geçerli olup olmadığını test ediyorum.


6

Bu çalışacak

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

Yalnızca alfasayısal karakterleri kabul eder:
test senaryoları:

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

veya

Bunu da deneyebilirsiniz. bu ifade en az bir sayı ve bir karakter sağladı ve başka hiçbir özel karakter içermedi

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

açısal olarak test edebilirsiniz:

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

PLUNKER DEMO

Referanslı: Angularjs'deki alfasayısal için düzenli ifade


4

Dize prototipini projeniz boyunca kullanmak üzere genişletin

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

Kullanımı:

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

3

Bu kodu SCRATCHPAD'inize girin ve işlemi görün.

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

2

Birçok kullanıcı, kesinlikle İngilizce çalışmadığımız sürece, bu düzenli ifadelerin neredeyse kesinlikle başarısız olacağını fark etmiş gibi görünüyor. Ama bence bu kadar sınırlı olmayacak kolay bir yol var.

  1. tüm UPPERCASE'te dizenizin bir kopyasını oluşturun
  2. tüm küçük harflerle ikinci bir kopya oluştur

Bu dizelerde eşleşen karakterler kesinlikle doğada alfabetik değildir.

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

İsteğe bağlı olarak, yalnızca 0 - 9 arasındaki rakamları arayarak rakamları da algılayabilirsiniz.


2

Bunu deneyin ... Alan kimliğinizi #name ile değiştirin ... az (a'dan z'ye), AZ (A'dan Z'ye), 0-9 (0-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 yalnızca NUMARALARI, ALFABETLERİ ve ÖZEL KARAKTERLERİ kabul edecek

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

Belirtilenden daha iyi Gayan Dissanayake.

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

Şimdi ^[a-zA-Z0-9]+$şu şekilde temsil edilebilir:^\w+$

Boşluk yerine \ s kullanmak isteyebilirsiniz . \ S , yalnızca bir boşluk karakteriyle değil boşlukla ilgilendiğini unutmayın .


1

Benzer bir dizem var Siyah (BF19) - 6.2-inç (2GB, 32GB ROM) Android 9.0 (13 MP + 2 MP) + 8MP Çift SIM 4000mAh 4G LTE akıllı telefon Samsung Galaxy A10s

Aşağıda yaptığım şey:

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

Ben izin ,._-sonra kullanmak split()ve join()değiştirmek ,için -alan ve için uyarı- sırasıyla.

Böyle bir şey elde ettim: samsung-galaxy-a10s-6.2-inch-2gb-32gb-rom-android-9.0-13mp-2mp-8mp-dual-sim-4000mah-4g-lte-smartphone-black-bf19-20 istediğim buydu.

Daha iyi bir çözüm olabilir ama bu benim için iyi çalışıyor buldum.


0

Bu sabiti kaydet

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

şimdi, parça kullanımını kontrol etmek için .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 yalnızca NUMARALARI, ALFABETLERİ ve ÖZEL KARAKTERLERİ kabul edecek

<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"> 

Yalnızca Sayıları

Girin : Yalnızca Harfleri

Girin : Harflerden ve özel karakterler gibi sayılardan başka bir sayı girin:

</body>
</html>

1
jquery javascript değil
rsm

Evet. Yukarıdaki kod çalışıyor teşekkürler çalıştırmak kod snippet'i tıklayarak kontrol edebilirsiniz.
Pranav Bhat

jquery bir javascript kütüphanesidir
Pranav Bhat

javascript yerine jquery kullanabilirsiniz kolay olacak :)
Pranav Bhat

Üzgünüm haklısın .. Javascript ile başka bir mesaj gönderdim! Bir ton teşekkürler!
Pranav Bhat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.