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

2020/10/10 05:01 · javascript ·  · 0评论

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

/^[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 _.-]+)$/

这将支持波斯语。

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

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

这将返回:

Test123TEST

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

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

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

^\w+$

说明:

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

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

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

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

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

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

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

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

前后的空白是可选的。

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

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

您可以通过检查字符串中是否有任何无效字符来间接实现此目的,而不是检查有效的字母数字字符串。为此,请检查与有效字母数字字符串补码是否匹配的任何内容

/[^a-z\d]/i    

这是一个例子:

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

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

这会工作

^(?=.*[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中字母数字的正则表达式

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

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

用法:

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

将这些代码输入到SCRATCHPAD中,然后查看操作。

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

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

  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来检测数字。

尝试此操作...将您的字段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;
    });
});

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>

我的字符串类似于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()替换,-and间隔-为。

我最终得到了这样的东西:
samsung-galaxy-a10s-6.2-inch-2gb-32gb-rom-android-9.0-13mp-2mp-8mp-dual-sim-4000mah-4g-lte-smartphone-black-bf19-20这就是我想要的。

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

甚至比Gayan Dissanayake指出的要好

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

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

您可能要使用\ s而不是空格。请注意,\ s照顾空格,而不仅仅是一个空格字符。

保存此常数

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

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>
本文地址:http://javascript.askforanswer.com/regex-for-javascriptjinyunxushiyongzimushuzi.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!