RegEx for Javascript仅允许使用字母数字


237

我需要找到一个仅允许字母数字的reg ex。到目前为止,我尝试的每个人都只能在字符串是字母数字的情况下工作,这意味着同时包含字母和数字。我只想要一个可以允许任一个而又不需要两个的东西。

Answers:


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

更新(支持通用字符)

如果您需要此正则表达式支持通用字符,则可以在此处找到unicode字符列表。

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

这将支持波斯语。


50
[az]与国际字符不匹配。
埃里克·诺曼德

23
哇-在以这种简单方式分解正则表达式之前,我不认为我会完全理解正则表达式。谢谢!
Matt Cashatt

问题-如果没有/ g,最终只能在换行之前替换匹配项。
Volomike

5
另一种方法是,[^\W_]但是[a-z0-9]/ i是显而易见的方法。
Vitim.us

36
@Greg,我很高兴您能解释与正则表达式相关的答案。我认为没有解释的正则表达式是没有用的。因为您一次性获得了“是的,它有用”,突然之间,当您需要更改它时,您会回到另一个用例,而不是真正地学习正则表达式的作用。另外,比起正则表达式文档,您更容易理解:P
Chris Cirefice,2013年

147

如果您想返回替换的结果,则可以使用:

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

这将返回:

Test123TEST

请注意,gi是必需的,因为它表示全局(不仅在第一个匹配项上),并且不区分大小写,这就是为什么我使用az而不是a-zA-Z的原因。括号中的^表示“括号中没有的任何内容”。

警告:如果这正是您想要的,字母数字就很棒。但是,如果您要在某个人的名字或地理区域等国际市场上使用此代码,则需要考虑unicode字符,而这样做是不会做的。例如,如果您有一个名称“lvarö”,则将其命名为“ lvar”。


3
这是一个很好的解释说明。请记住,如果需要,请留出空间。.replace(/ [^ a-z0-9 \] / gi,'')
乔·约翰斯顿

82

使用单词字符类。以下等效于^[a-zA-Z0-9_]+$

^\w+$

说明:

  • ^字符串的开头
  • \ w任何单词字符(AZ,az,0-9,_)。
  • $字符串结尾

使用/[^\w]|_/g,如果你不想匹配下划线。


20
\ w实际上等效于[a-zA-Z_0-9],因此您的RegEx也匹配下划线[_]。
马丁·布朗

几乎字母数字根本不是字母数字,但是非常感谢您的帮助我
ajax333221 2011年

是的,不是对发布的Q的严格回答,而是我所寻找的
原型

很抱歉,但这并不符合国际字符,如A
亚历弥

太糟糕了,这消除了我的口音
Miguel

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

上面的正则表达式允许在字符串的两侧使用空格并限制特殊字符,仅允许使用az,AZ,0-9,空格,下划线和破折号。


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

请注意位于处的逻辑not运算符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);

朋克演示

引用:Angular.js 中字母数字的正则表达式



3

将这些代码输入到您的SCRATCHPAD并查看操作。

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

2

似乎很多用户已经注意到,除非我们严格使用英语,否则这些正则表达式几乎肯定会失败。但是我认为有一个简单的前进方向,不会受到如此局限。

  1. 全部大写一个字符串的副本
  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]+$/

现在,用于检查零件使用.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只接受数字,字母和特殊字符

<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

是的 感谢上面的代码正在工作,您可以单击运行代码片段进行检查。
普拉纳夫·巴特

jQuery是一个JavaScript库
Pranav Bhat

我们可以使用jquery来代替javascript,这很容易:)
Pranav Bhat

我很抱歉,您说得对。.我用JavaScript发布了另一个!万分感谢!
普拉纳夫·巴特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.