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.

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.


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


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.


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.


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.


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.


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


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

3

Masukkan kode ini ke SCRATCHPAD Anda dan lihat aksinya.

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

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.


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;
    });
});

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>


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.


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.


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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.