RegEx untuk Javascript hanya mengizinkan alfanumerik

237

Saya perlu menemukan mantan reg yang hanya memungkinkan alfanumerik. Sejauh ini, semua orang yang saya coba hanya berfungsi jika stringnya alfanumerik, artinya mengandung huruf dan angka. Saya hanya ingin satu yang memungkinkan dan tidak membutuhkan keduanya.

Pengguna
sumber

Jawaban:

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

Perbarui (mendukung karakter universal)

Jika Anda perlu regexp ini mendukung karakter universal, Anda dapat menemukan daftar karakter unicode di sini.

sebagai contoh: /^([a-zA-Z0-9\u0600-\u06FF\u0660-\u0669\u06F0-\u06F9 _.-]+)$/

ini akan mendukung persia.

Greg
sumber
50
[az] tidak cocok dengan karakter internasional.
Eric Normand
23
Wow - saya pikir saya tidak pernah benar-benar memahami regex sampai itu dipecah dengan cara sederhana ini. Terima kasih!
Matt Cashatt
Masalah - tanpa / g, Anda hanya akan mengganti kecocokan sebelum pembungkus baris.
Volomike
5
cara lain akan [^\W_]tetapi [a-z0-9]/ i adalah cara yang jelas.
Vitim.us
36
@ Greg, saya menikmati bagaimana Anda menjelaskan jawaban terkait regex Anda. Regex tanpa penjelasan, menurut saya, agak tidak berguna. Karena Anda mendapatkan satu kali "ya itu bekerja" dan tiba-tiba, ketika Anda perlu mengubahnya Anda kembali benar dengan penggunaan-kasus yang berbeda, bukan benar-benar belajar apa regex tidak . Plus, Anda lebih mudah dipahami daripada dokumentasi regex: P
Chris Cirefice
147

Jika Anda ingin mengembalikan hasil yang diganti, maka ini akan berhasil:

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

Ini akan mengembalikan:

Test123TEST

Perhatikan bahwa gi diperlukan karena itu berarti global (bukan hanya pada pertandingan pertama), dan case-insensitive, itulah sebabnya saya memiliki az bukannya a-zA-Z. Dan ^ di dalam tanda kurung berarti "apa pun yang tidak ada dalam tanda kurung ini".

PERINGATAN: Alfanumerik bagus jika itu yang Anda inginkan. Tetapi jika Anda menggunakan ini di pasar internasional seperti nama seseorang atau wilayah geografis, maka Anda perlu memperhitungkan karakter unicode, yang ini tidak akan dilakukan. Misalnya, jika Anda memiliki nama seperti "lvar", itu akan membuatnya "lvar".

Volomike
sumber
3
Ini adalah jawaban yang bagus dengan penjelasannya. Ingatlah untuk memberikan ruang jika Anda membutuhkannya. .replace (/ [^ a-z0-9 \] / gi, '')
Joe Johnston
82

Gunakan kelas karakter kata. Berikut ini setara dengan ^[a-zA-Z0-9_]+$:

^\w+$

Penjelasan:

  • ^ mulai dari string
  • \ w karakter kata apa pun (AZ, az, 0-9, _).
  • $ end of string

Gunakan /[^\w]|_/gjika Anda tidak ingin mencocokkan garis bawah.

Chase Seibert
sumber
21
\ w sebenarnya setara dengan [a-zA-Z_0-9] sehingga RegEx Anda juga cocok dengan garis bawah [_].
Martin Brown
hampir alfanumerik sama sekali bukan alfanumerik, tapi terima kasih ans Anda banyak membantu saya
ajax333221
Benar, bukan jawaban yang ketat untuk Q seperti yang diposting, tapi persis apa yang saya cari ..
prototipe
Maaf, tetapi ini tidak cocok dengan karakter internasional, seperti Ä
Alex Mi
Sayang sekali ini menghapus aksen saya
Miguel
38
/^([a-zA-Z0-9 _-]+)$/

regex di atas memungkinkan spasi di samping string dan membatasi karakter khusus. Ini hanya memungkinkan az, AZ, 0-9, Spasi, Garis Bawah dan tanda hubung.

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

atau, jika Anda menginginkan minimal satu karakter:

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

Kurung kotak menunjukkan serangkaian karakter. ^ adalah awal input. $ adalah akhir dari input (atau baris baru, tergantung pada opsi Anda). Adalah spasi.

Ruang putih sebelum dan sesudah adalah opsional.

Tanda kurung adalah operator pengelompokan untuk memungkinkan Anda mengekstrak informasi yang Anda inginkan.

EDIT: menghapus kesalahan penggunaan set karakter saya.

cletus
sumber
6

Alih-alih memeriksa string alfanumerik yang valid, Anda dapat mencapai ini secara tidak langsung dengan memeriksa string untuk karakter yang tidak valid. Lakukan dengan memeriksa apa pun yang cocok dengan pelengkap string alfanumerik yang valid.

/[^a-z\d]/i    

Berikut ini sebuah contoh:

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

Perhatikan operator bukan logis di isValid, karena saya menguji apakah string itu salah, bukan apakah itu valid.

Schalk
sumber
6

Ini akan bekerja

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

Ini hanya menerima karakter alfanumerik saja:
kasus uji yang dikemukakan:

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

atau

Anda juga dapat mencoba yang ini. ungkapan ini memuaskan setidaknya satu angka dan satu karakter dan tidak ada karakter khusus lainnya

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

di sudut dapat menguji seperti:

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

PLUNKER DEMO

Dirujuk: Ekspresi reguler untuk alfanumerik di Angularjs

Tengkorak
sumber
4

Perpanjang prototipe string untuk digunakan di seluruh proyek Anda

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

Pemakaian:

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

Masukkan kode ini ke SCRATCHPAD Anda dan lihat aksinya.

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

Sepertinya banyak pengguna memperhatikan ini, ekspresi reguler ini hampir pasti akan gagal kecuali kami benar-benar bekerja dalam bahasa Inggris. Tapi saya pikir ada cara mudah ke depan yang tidak akan terbatas.

  1. buat salinan string Anda di semua UPPERCASE
  2. buat salinan kedua di semua huruf kecil

Karakter apa pun yang cocok dengan string itu jelas tidak alfabet.

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

Secara opsional, Anda juga dapat mendeteksi angka dengan hanya mencari angka 0 hingga 9.

John Dorsey
sumber
2

Coba ini ... Ganti ID bidang Anda dengan #name ... az (a ke z), AZ (A ke Z), 0-9 (0 hingga 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;
    });
});
Tanmay Patel
sumber
2

JAVASCRIPT hanya menerima NOMOR, ALFABET dan KARECTER KHUSUS

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>

Pranav Bhat
sumber
1

Bahkan lebih baik dari yang Gayan Dissanayakeditunjukkan.

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

Sekarang ^[a-zA-Z0-9]+$dapat direpresentasikan sebagai^\w+$

Anda mungkin ingin menggunakan \ s bukan ruang. Perhatikan bahwa \ s mengurus spasi dan tidak hanya satu karakter ruang.

Brian
sumber
1

Saya memiliki string yang mirip dengan Samsung Galaxy A10s 6.2-Inch (2GB, 32GB ROM) Android 9.0, (13MP + 2MP) + 8MP Dual SIM 4000mAh 4G LTE Smartphone - Hitam (BF19)

Di bawah ini yang saya lakukan:

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

Perhatikan saya diizinkan ,._-kemudian gunakan split()dan join()ganti ,ke -dan ruang -masing - masing.

Saya akhirnya mendapatkan sesuatu seperti ini: samsung-galaxy-a10s-6.2-inch-2gb-32gb-rom-android-9.0-13mp-2mp-8mp-dual-sim-4000mah-4g-lte-smartphone-black-bf19-20yang saya inginkan.

Mungkin ada solusi yang lebih baik tetapi ini yang saya temukan bekerja dengan baik untuk saya.

Harrison O
sumber
0

Simpan konstanta ini

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

sekarang, untuk mengecek penggunaan part .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
Abhin Krishna KA
sumber
-1

Jquery hanya menerima NOMOR, ALFABET, dan KARAKTER KHUSUS

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

Masukkan Hanya Angka:

Masukkan Hanya Abjad:

Masukkan selain Abjad dan angka seperti karakter khusus:

</body>
</html>
Pranav Bhat
sumber
1
jquery bukan javascript
rsm
Ya. Terima kasih kode di atas berfungsi, Anda dapat memeriksa dengan mengeklik cuplikan kode yang dijalankan.
Pranav Bhat
jquery adalah perpustakaan javascript
Pranav Bhat
kita bisa menggunakan jquery daripada javascript itu akan mudah :)
Pranav Bhat
Saya Sorrry Anda benar .. Saya telah memposting lainnya dengan javascript! Terima kasih banyak!
Pranav Bhat