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

时间:2008-12-23 14:32:10

标签: javascript regex

我需要找到一个只允许使用字母数字的注册表。到目前为止,我尝试的每个人只有在字符串是字母数字时才有效,这意味着包含字母和数字。我只想要一个允许的两者而不需要两者。

21 个答案:

答案 0 :(得分:425)

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

答案 1 :(得分:132)

如果您想要返回替换结果,那么这将起作用:

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

这将返回:

Test123TEST

请注意,gi是必需的,因为它意味着全局(不仅仅是第一次匹配),而且不区分大小写,这就是为什么我有a-z而不是a-zA-Z。括号内的^表示“不在这些括号中的任何东西”。

警告:如果这正是您想要的,那么字母数字就很棒。但是,如果您在国际市场上使用此类似于某个人的姓名或地理区域,那么您需要考虑unicode字符,这是不可行的。例如,如果你有一个像“Âlvarö”这样的名字,它会使它成为“lvar”。

答案 2 :(得分:75)

使用单词class class。以下内容相当于^[a-zA-Z0-9_]+$

^\w+$

说明:

  • ^字符串的开头
  • \ w任何单词字符(A-Z,a-z,0-9,_)。
  • $ end of string

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

答案 3 :(得分:32)

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

上面的正则表达式允许字符串中的空格并限制特殊字符。它只允许 a-z,A-Z,0-9,Space,Underscore和dash。

答案 4 :(得分:12)

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

或者,如果您想要至少一个字符:

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

方括号表示一组字符。 ^是输入的开始。 $是输入结束(或换行符,具体取决于您的选项)。 \ s是空白。

之前和之后的空格是可选的。

括号是分组运算符,允许您提取所需的信息。

编辑:删除了错误使用\ w字符集。

答案 5 :(得分:6)

这将有效

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

仅接受alphanumeriuc字符:
测试用例:

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 DEMO

Refered:Regular expression for alphanumeric in Angularjs

答案 6 :(得分:4)

不是检查有效的字母数字字符串,而是通过检查字符串中是否存在任何无效字符来间接实现此目的。通过检查与有效字母数字字符串的补充匹配的任何内容来执行此操作。

/[^a-z\d]/i    

以下是一个例子:

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

注意isValid处的逻辑非运算符,因为我正在测试字符串是否为假,而不是它是否有效。

答案 7 :(得分:4)

扩展字符串原型以在整个项目中使用

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

用法:

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

答案 8 :(得分:2)

试试这个...用#name替换你的字段ID ... a-z(a到z), A-Z(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;
    });
});

答案 9 :(得分:2)

对于多语言支持:

var filtered = 'Hello Привет 你好 123_456'.match(/[\p{L}|\p{N}|\s]/gu).join('')
console.log(filtered) // --> "Hello Привет 你好 123456"

这匹配大多数语言中的任何字母、数字或空格。

  • [...] -> 符合条件
  • [a|b] -> 匹配 'a' 或 'b'
  • \p{L} -> 匹配任何语言的任何字母
  • \p{N} -> 匹配任何语言的任何数字
  • \s -> 匹配一个空格
  • /g -> 在第一场比赛后不要停止
  • /u -> 支持unicode模式匹配

参考:https://javascript.info/regexp-unicode

答案 10 :(得分:2)

我的字符串类似于 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是我想要的。

可能有更好的解决方案,但这是我发现对我来说很好的方法。

答案 11 :(得分:2)

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

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

答案 12 :(得分:2)

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

  1. 在所有大写
  2. 中制作字符串的副本
  3. 以全小写
  4. 制作第二个副本

    在这些字符串中匹配的任何字符绝对不是字母。

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

    或者,您也可以通过查找数字0到9来检测数字。

答案 13 :(得分:1)

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>

答案 14 :(得分:1)

保存此常量

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

答案 15 :(得分:1)

甚至比Gayan Dissanayake更好。

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

现在^[a-zA-Z0-9]+$可以表示为^\w+$

  

您可能希望使用 \ s 而不是空格。请注意, \ s 会处理空格,而不仅仅是一个空格字符。

答案 16 :(得分:0)

Question is old, but it's never too late to answer

$(document).ready(function() {
  //prevent paste
  var usern_paste = document.getElementById('yourid');
  usern_paste.onpaste = e => e.preventDefault();

  //prevent copy
  var usern_drop = document.getElementById('yourid');
  usern_drop.ondrop = e => e.preventDefault();
});

$('#yourid').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;
});

答案 17 :(得分:0)

区分大小写的字母数字:

if (/^[a-zA-Z0-9]+$/.test("SoS007")) {
  alert("match")
}

答案 18 :(得分:0)

有点晚了,但这对我有用:

/[^a-z A-Z 0-9]+/g

a-z : 从 a 到 z。

A-Z:从 A 到 Z(大写)。

0-9 : 0 到 9 之间的任意数字。

它将允许方括号内的任何内容,所以假设您想允许任何其他字符,例如“/”和“#”,正则表达式将是这样的:

/[^a-z A-Z 0-9 / #]+/g

本网站将帮助您在编码前测试您的正则表达式。 https://regex101.com/

随意修改并将您想要的任何内容添加到括号中。 问候:)

答案 19 :(得分:0)

此外,如果您只查找字母字符,可以使用以下正则表达式:

/[^a-zA-Z]/gi 

打字稿中的示例代码:

let samplestring = "!#!&34!# Alphabet !!535!!! is safe"

let regex = new RegExp(/[^a-zA-Z]/gi);
    let res = samplestring.replace(regex,'');

    console.log(res);

注意:如果您对 RegEx 语法感到好奇,请访问 regexr 并使用备忘单或使用正则表达式。

编辑:字母数字 --> 字母

答案 20 :(得分:-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>