RegEx สำหรับ Javascript อนุญาตให้ใช้ตัวอักษรและตัวเลขเท่านั้น


237

ฉันต้องการค้นหา reg ex ที่อนุญาตให้ใช้ตัวอักษรและตัวเลขเท่านั้น จนถึงตอนนี้ทุกคนที่ฉันลองใช้งานได้ก็ต่อเมื่อสตริงนั้นเป็นตัวอักษรและตัวเลขความหมายมีทั้งตัวอักษรและตัวเลข ฉันแค่ต้องการสิ่งที่จะอนุญาตและไม่ต้องการทั้งสองอย่าง

คำตอบ:


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

อัปเดต (รองรับอักขระสากล)

หากคุณต้องการ regexp นี้รองรับอักขระสากลคุณสามารถค้นหารายชื่อผู้จัดทำ Unicode ได้ที่นี่

ตัวอย่างเช่น: /^([a-zA-Z0-9\u0600-\u06FF\u0660-\u0669\u06F0-\u06F9 _.-]+)$/

สิ่งนี้จะสนับสนุนเปอร์เซีย


50
[az] ไม่ตรงกับอักขระสากล
Eric Normand

23
ว้าว - ฉันไม่คิดว่าฉันจะเข้าใจอย่างถ่องแท้ regex จนกว่ามันจะพังลงด้วยวิธีง่าย ๆ นี้ ขอบคุณ!
Matt Cashatt

ปัญหา - หากไม่มี / g คุณจะจบลงด้วยการแทนที่แมทช์ก่อนที่จะถึงเส้นตัด
Volomike

5
วิธีอื่นจะเป็น[^\W_]แต่[a-z0-9]/ i เป็นวิธีที่ชัดเจน
Vitim.us

36
@Greg ฉันสนุกกับวิธีที่คุณอธิบายคำตอบที่เกี่ยวข้องกับ regex ของคุณ ในความคิดของฉัน Regexes ที่ไม่มีคำอธิบายนั้นไร้ประโยชน์ เพราะคุณจะได้รับ "ใช่มันทำงาน" เพียงครั้งเดียวและในทันใดเมื่อคุณต้องการเปลี่ยนคุณกลับมาพร้อมกับกรณีการใช้งานที่แตกต่างกันแทนที่จะเรียนรู้ว่า regex ทำอะไร นอกจากนี้คุณยังเข้าใจได้ง่ายกว่าเอกสาร regex: P
Chris Cirefice

147

หากคุณต้องการส่งคืนผลลัพธ์ที่ถูกแทนที่สิ่งนี้จะใช้ได้:

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

สิ่งนี้จะกลับมา:

Test123TEST

โปรดทราบว่า gi มีความจำเป็นเพราะมันหมายถึงทั่วโลก (ไม่ใช่แค่ในนัดแรก) และตัวพิมพ์เล็ก - ใหญ่ซึ่งเป็นสาเหตุที่ฉันมี az แทน a-zA-Z และ ^ ภายในเครื่องหมายวงเล็บหมายถึง "อะไรก็ตามที่ไม่อยู่ในวงเล็บเหล่านี้"

คำเตือน: ตัวอักษรและตัวเลขเป็นสิ่งที่ดีถ้านั่นคือสิ่งที่คุณต้องการ แต่ถ้าคุณกำลังใช้สิ่งนี้ในตลาดต่างประเทศเช่นชื่อของบุคคลหรือพื้นที่ทางภูมิศาสตร์คุณต้องพิจารณาอักขระยูนิโค้ดซึ่งสิ่งนี้จะไม่ทำ ตัวอย่างเช่นหากคุณมีชื่อเช่น "Âlvarö" มันจะทำให้ "lvar"


3
นี่คือคำตอบที่ดีพร้อมคำอธิบาย อย่าลืมเว้นช่องว่างหากคุณต้องการ .replace (/ [^ a-z0-9 \] / gi, '')
Joe Johnston

82

ใช้คลาสอักขระคำ ต่อไปนี้เทียบเท่ากับ^[a-zA-Z0-9_]+$:

^\w+$

คำอธิบาย:

  • เริ่มจากสตริง ^
  • \ w อักขระคำใด ๆ (AZ, az, 0-9, _)
  • $ จุดสิ้นสุดของสตริง

ใช้/[^\w]|_/gหากคุณไม่ต้องการจับคู่ขีดล่าง


20
\ w เทียบเท่ากับ [a-zA-Z_0-9] ดังนั้น RegEx ของคุณจึงตรงกับขีดล่าง [_]
Martin Brown

เกือบตัวอักษรและตัวเลขไม่ได้เป็นตัวอักษรและตัวเลข แต่ขอบคุณ ans ของคุณช่วยฉันมาก
ajax333221

จริงไม่ใช่คำตอบที่เข้มงวดของ Q ตามที่โพสต์ แต่สิ่งที่ฉันกำลังมองหา ..
ต้นแบบ

ขออภัย แต่นี่ไม่ตรงกับตัวอักษรต่างประเทศเช่นÄ
Alex Mi

แย่เกินไปนี่ลบสำเนียงของฉัน
Miguel

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

regex ด้านบนอนุญาตให้มีช่องว่างด้านข้างของสตริงและ จำกัด อักขระพิเศษเฉพาะอนุญาตให้ az, AZ, 0-9, Space, ขีดล่างและขีด


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

หรือถ้าคุณต้องการอักขระอย่างน้อยหนึ่งตัว:

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

วงเล็บเหลี่ยมแสดงชุดของอักขระ ^ คือจุดเริ่มต้นของอินพุต $ คือจุดสิ้นสุดการป้อนข้อมูล (หรือขึ้นบรรทัดใหม่ขึ้นอยู่กับตัวเลือกของคุณ) \ s คือช่องว่าง

ช่องว่างก่อนและหลังเป็นตัวเลือก

วงเล็บคือตัวดำเนินการจัดกลุ่มเพื่อให้คุณสามารถดึงข้อมูลที่คุณต้องการ

แก้ไข: ลบการใช้ชุดอักขระ \ w ที่ผิดพลาดของฉัน


6

แทนที่จะตรวจสอบสตริงตัวอักษรและตัวเลขที่ถูกต้องคุณสามารถทำสิ่งนี้ได้โดยอ้อมโดยการตรวจสอบสตริงสำหรับอักขระที่ไม่ถูกต้อง ทำได้โดยตรวจสอบสิ่งที่ตรงกับส่วนประกอบของสตริงตัวอักษรและตัวเลขที่ถูกต้อง

/[^a-z\d]/i    

นี่คือตัวอย่าง:

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

สังเกตุลอจิคัลไม่ใช่โอเปอเรเตอร์ที่isValidเนื่องจากฉันกำลังทดสอบว่าสตริงนั้นเป็นเท็จหรือไม่


6

สิ่งนี้จะได้ผล

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

ยอมรับเฉพาะอักขระตัวอักษรและตัวเลขเท่านั้น:
กรณีทดสอบ pased:

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

หรือ

คุณสามารถลองอันนี้ การแสดงออกนี้พอใจอย่างน้อยหนึ่งหมายเลขและหนึ่งตัวอักษรและไม่มีอักขระพิเศษอื่น ๆ

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

ในเชิงมุมสามารถทดสอบเช่น:

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

สาธิต PLUNKER

อ้างอิง: นิพจน์ทั่วไปสำหรับตัวเลขและตัวอักษรใน Angularjs


4

ขยายต้นแบบเครื่องสายที่จะใช้ตลอดโครงการของคุณ

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

การใช้งาน:

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

3

ป้อนรหัสเหล่านี้ลงใน SCRATCHPAD ของคุณและดูการทำงาน

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

2

ดูเหมือนว่าผู้ใช้หลายคนสังเกตเห็นว่าการแสดงออกปกติเหล่านี้จะล้มเหลวอย่างแน่นอนเว้นแต่ว่าเราจะทำงานเป็นภาษาอังกฤษ แต่ฉันคิดว่ามีวิธีง่าย ๆ ที่จะไม่ จำกัด

  1. ทำสำเนาสตริงของคุณใน UPPERCASE ทั้งหมด
  2. ทำสำเนาที่สองในตัวพิมพ์เล็กทั้งหมด

อักขระใด ๆ ที่ตรงกับสตริงเหล่านั้นไม่ได้เป็นตัวอักษรตามธรรมชาติ

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

คุณยังสามารถตรวจจับตัวเลขได้โดยเพียงแค่ค้นหาตัวเลข 0 ถึง 9


2

ลองนี้ ... แทนที่ ID ฟิลด์ของคุณด้วย #name ... az (a ถึง z), AZ (A ถึง Z), 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 ยอมรับเฉพาะตัวเลขตัวอักษรและอักขระพิเศษ

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

ดียิ่งกว่าGayan Dissanayakeชี้ให้เห็น

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

ตอนนี้^[a-zA-Z0-9]+$สามารถแสดงเป็น^\w+$

คุณอาจต้องการใช้\ sแทนการเว้นวรรค โปรดทราบว่า\ sดูแลช่องว่างและไม่ใช่อักขระช่องว่างเพียงตัวเดียว


1

ฉันมีสตริงคล้ายกับSamsung Galaxy A10s 6.2 นิ้ว (2GB, 32GB ROM) Android 9.0, (13MP + 2MP) + 8MP Dual SIM 4000mAh 4G LTE สมาร์ทโฟน - ดำ (BF19)

ด้านล่างคือสิ่งที่ฉันทำ:

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

แจ้งให้ทราบฉันได้รับอนุญาต ,._-แล้วใช้split()และjoin()ที่จะเปลี่ยน,ไป-และพื้นที่ที่จะ-ตามลำดับ

ฉันได้รับสิ่งนี้: samsung-galaxy-a10s-6.2-inch-2gb-32gb-rom-android-9.0-13mp-2mp-8mp-dual-sim-4000mah-4g-lte-smartphone-black-bf19-20ซึ่งเป็นสิ่งที่ฉันต้องการ

อาจมีทางออกที่ดีกว่า แต่นี่คือสิ่งที่ฉันพบว่าทำงานได้ดีสำหรับฉัน


0

บันทึกค่าคงที่นี้

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

ตอนนี้สำหรับการตรวจสอบการใช้งานส่วนหนึ่งจับคู่ ()

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 ที่จะยอมรับเฉพาะตัวเลขตัวอักษรและอักขระพิเศษ

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

ป้อนเฉพาะตัวเลข:

ป้อนเฉพาะตัวอักษร:

ป้อนตัวอักษรอื่นที่ไม่ใช่ตัวอักษรและตัวเลขเช่นตัวอักษรพิเศษ:

</body>
</html>

1
jquery ไม่ใช่ javascript
rsm

ใช่. ขอบคุณรหัสข้างต้นใช้งานได้คุณสามารถตรวจสอบได้โดยคลิกเรียกใช้ข้อมูลโค้ด
Bhat

jquery เป็นห้องสมุด javascript
Pranav Bhat

เราสามารถใช้ jquery แทน javascript มันจะง่าย :)
Pranav Bhat

ฉัน Sorrry คุณถูกต้อง .. ฉันได้โพสต์อีกด้วย javascript! ขอบคุณตัน!
Bhat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.