RegEx cho Javascript chỉ cho phép chữ và số


237

Tôi cần tìm một reg ex chỉ cho phép chữ và số. Cho đến nay, mọi người tôi thử chỉ hoạt động nếu chuỗi là chữ và số, nghĩa là chứa cả chữ và số. Tôi chỉ muốn một thứ sẽ cho phép hoặc không yêu cầu cả hai.

Câu trả lời:


511
/^[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

Cập nhật (hỗ trợ các ký tự phổ quát)

Nếu bạn cần regrec này hỗ trợ nhân vật phổ quát, bạn có thể tìm thấy danh sách các charaters unicode ở đây.

ví dụ: /^([a-zA-Z0-9\u0600-\u06FF\u0660-\u0669\u06F0-\u06F9 _.-]+)$/

Điều này sẽ hỗ trợ Ba Tư.


50
[az] không phù hợp với các ký tự quốc tế.
Eric Normand

23
Wow - Tôi không nghĩ rằng tôi đã từng hiểu thấu đáo về regex cho đến khi nó bị phá vỡ theo cách đơn giản này. Cảm ơn!
Matt Cashatt

Vấn đề - không có / g, cuối cùng bạn chỉ thay thế các trận đấu trước khi kết thúc một dòng.
Volomike

5
một cách khác sẽ là [^\W_]nhưng [a-z0-9]/ tôi là một cách rõ ràng.
Vitim.us

36
@Greg, tôi thích cách bạn giải thích các câu trả lời liên quan đến regex của bạn. Regexes mà không có lời giải thích, theo tôi, là loại vô dụng. Bởi vì bạn nhận được rằng "vâng, nó hoạt động một lần" và đột nhiên, khi bạn cần thay đổi, bạn quay lại với một trường hợp sử dụng khác, thay vì thực sự học những gì regex làm . Ngoài ra, bạn dễ hiểu hơn tài liệu regex: P
Chris Cirefice 19/12/13

147

Nếu bạn muốn trả về một kết quả thay thế, thì điều này sẽ hoạt động:

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

Điều này sẽ trở lại:

Test123TEST

Lưu ý rằng gi là cần thiết bởi vì nó có nghĩa là toàn cầu (không chỉ trong trận đấu đầu tiên) và không phân biệt chữ hoa chữ thường, đó là lý do tại sao tôi có az thay vì a-zA-Z. Và ^ bên trong ngoặc có nghĩa là "bất cứ điều gì không có trong các dấu ngoặc".

CẢNH BÁO: Chữ và số thật tuyệt nếu đó chính xác là những gì bạn muốn. Nhưng nếu bạn đang sử dụng điều này trong một thị trường quốc tế như tên hoặc khu vực địa lý của một người, thì bạn cần tính đến các ký tự unicode, điều này sẽ không xảy ra. Chẳng hạn, nếu bạn có một cái tên như "Âlvarö", nó sẽ biến nó thành "lvar".


3
Đây là một câu trả lời tuyệt vời với lời giải thích. Hãy nhớ cho phép không gian nếu bạn cần chúng. .replace (/ [^ a-z0-9 \] / gi, '')
Joe Johnston

82

Sử dụng lớp ký tự từ. Sau đây là tương đương với một^[a-zA-Z0-9_]+$ :

^\w+$

Giải trình:

  • ^ bắt đầu chuỗi
  • \ w bất kỳ ký tự từ nào (AZ, az, 0-9, _).
  • $ cuối chuỗi

Sử dụng /[^\w]|_/gnếu bạn không muốn khớp với dấu gạch dưới.


20
\ w thực sự tương đương với [a-zA-Z_0-9] vì vậy RegEx của bạn cũng khớp với dấu gạch dưới [_].
Martin Brown

hầu như chữ và số hoàn toàn không phải là chữ và số, nhưng cảm ơn ans của bạn đã giúp tôi rất nhiều
ajax333221

Đúng, không phải là một câu trả lời nghiêm ngặt cho Q như đã đăng, nhưng chính xác những gì tôi đang tìm kiếm ..
nguyên mẫu

Xin lỗi, nhưng điều này không phù hợp với các nhân vật quốc tế, chẳng hạn như Ä
Alex Mi

quá tệ điều này loại bỏ giọng của tôi
Miguel

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

regex ở trên cho phép không gian bên cạnh một chuỗi và hạn chế các ký tự đặc biệt. Nó chỉ cho phép az, AZ, 0-9, Space, Underscore và dash.


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

hoặc, nếu bạn muốn tối thiểu một ký tự:

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

Dấu ngoặc vuông cho biết một tập hợp các ký tự. ^ là bắt đầu của đầu vào. $ là kết thúc của đầu vào (hoặc dòng mới, tùy thuộc vào tùy chọn của bạn). \ s là khoảng trắng.

Khoảng trắng trước và sau là tùy chọn.

Các dấu ngoặc đơn là toán tử nhóm để cho phép bạn trích xuất thông tin bạn muốn.

EDIT: đã loại bỏ việc sử dụng sai bộ ký tự \ w của tôi.


6

Thay vì kiểm tra chuỗi ký tự chữ và số hợp lệ, bạn có thể đạt được điều này một cách gián tiếp bằng cách kiểm tra chuỗi cho bất kỳ ký tự không hợp lệ nào. Làm như vậy bằng cách kiểm tra bất cứ thứ gì khớp với phần của chuỗi ký tự chữ và số hợp lệ.

/[^a-z\d]/i    

Đây là một ví dụ:

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

Lưu ý toán tử không phải toán tử tại isValid, vì tôi đang kiểm tra xem chuỗi có sai hay không, liệu nó có hợp lệ không.


6

Điều này sẽ làm việc

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

Nó chỉ chấp nhận các ký tự alphanumeriuc:
các trường hợp thử nghiệm vượt qua:

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

hoặc là

Bạn cũng có thể thử cái này biểu thức này thỏa mãn ít nhất một số và một ký tự và không có ký tự đặc biệt nào khác

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

trong góc có thể kiểm tra như:

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

DEMO

Đã giới thiệu: Biểu thức chính quy cho chữ và số trong Angularjs


4

Mở rộng nguyên mẫu chuỗi để sử dụng trong suốt dự án của bạn

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

Sử dụng:

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

3

Nhập các mã này vào SCRATCHPAD của bạn và xem hành động.

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

2

Có vẻ như nhiều người dùng đã nhận thấy điều này những biểu thức thông thường này gần như chắc chắn sẽ thất bại trừ khi chúng ta làm việc nghiêm túc bằng tiếng Anh. Nhưng tôi nghĩ rằng có một cách dễ dàng để không bị giới hạn.

  1. tạo một bản sao của chuỗi của bạn trong tất cả UPPERCASE
  2. tạo một bản sao thứ hai trong tất cả các chữ thường

Bất kỳ ký tự nào khớp trong các chuỗi đó chắc chắn không phải là chữ cái trong tự nhiên.

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

Tùy chọn, bạn cũng có thể phát hiện các số bằng cách chỉ tìm các chữ số 0 đến 9.


2

Hãy thử điều này ... Thay thế ID trường của bạn bằng #name ... az (a thành z), AZ (A thành Z), 0-9 (0 đến 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 chỉ chấp nhận SỐ SỐ, ALPHABET và BỘ SẠC ĐẶC BIỆT

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

Thậm chí tốt hơn Gayan Dissanayakechỉ ra.

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

Bây giờ ^[a-zA-Z0-9]+$có thể được đại diện là^\w+$

Bạn có thể muốn sử dụng \ s thay vì không gian. Lưu ý rằng \ s quan tâm đến khoảng trắng và không chỉ một ký tự khoảng trắng.


1

Tôi có chuỗi tương tự như Samsung Galaxy A10s 6.2-Inch (2 GB, ROM 32 GB) Android 9.0, (13MP + 2MP) + 8MP Dual SIM 4000mAh Điện thoại thông minh 4G LTE - Đen (BF19)

Dưới đây là những gì tôi đã làm:

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

Chú ý tôi cho phép ,._-sau đó sử dụng split()join()thay thế ,để -và không gian để- tương ứng.

Tôi cuối cùng đã nhận được một cái gì đó như thế này: samsung-galaxy-a10s-6.2-inch-2gb-32gb-rom-android-9.0-13mp-2mp-8mp-dual-sim-4000mah-4g-lte-smartphone-black-bf19-20 đó là những gì tôi muốn.

Có thể có một giải pháp tốt hơn nhưng đây là những gì tôi thấy làm việc tốt cho tôi.


0

Lưu hằng này

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

bây giờ, để kiểm tra phần sử dụng .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 chỉ chấp nhận SỐ, ALPHABETS và ĐẶC BIỆT ĐẶC BIỆT

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

Chỉ nhập số:

Nhập chỉ bảng chữ cái:

Nhập khác với bảng chữ cái và số như các ký tự đặc biệt:

</body>
</html>

1
jquery là không javascript
RSM

Vâng. Cảm ơn mã trên đang hoạt động, bạn có thể kiểm tra bằng cách nhấp vào đoạn mã chạy.
Pranav Bhat

jquery là một thư viện javascript
Pranav Bhat

chúng ta có thể sử dụng jquery thay vì javascript sẽ dễ dàng :)
Pranav Bhat

Tôi đang buồn vì bạn đã đúng .. Tôi đã đăng một bài khác với javascript! Cảm ơn rất nhiều!
Pranav Bhat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.