繁体   English   中英

Javascript 的正则表达式只允许字母数字

[英]RegEx for Javascript to allow only alphanumeric

我需要找到一个只允许字母数字的 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

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

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-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$

它只接受字母数字字符:
已通过的测试用例:

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

柱塞演示

参考: Angularjs中字母数字的正则表达式

对于多语言支持:

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

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

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

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

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

/[^a-z\d]/i    

这是一个例子:

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

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

我有类似于三星 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这就是我想要的。

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

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

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

用法:

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

甚至比Gayan Dissanayake指出的还要好。

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

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

您可能想要使用\s而不是空格。 请注意, \s负责处理空格,而不仅仅是一个空格字符。

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

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

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

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

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 = /^[az]/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>

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

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

az :从 a 到 z 的任何内容。

AZ :从 A 到 Z 的任何内容(大写)。

0-9 :从 0 到 9 的任意数字。

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

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

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

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

试试这个......用#name替换你的字段ID...... 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;
    });
});

保存这个常量

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

区分大小写的字母数字:

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

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=/^[az]/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>

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

/[^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并使用备忘单或使用正则表达式。

编辑:字母数字->字母

只接受数字和字母(无空格)

 function onlyAlphanumeric(str){ str.value=str.value.replace(/\s/g, "");//No Space str.value=str.value.replace(/[^a-zA-Z0-9 ]/g, ""); }
 <div>Only accept numbers and letters </div> <input type="text" onKeyUp="onlyAlphanumeric(this);" >

现场演示

<script type="text/javascript">
//this will prevent characters that are not alphanumeric
//this will also prevent pasting of characters that are not alphanumeric

$("#myinput").on('input paste', function() {
    var valx = $(this).val();
    var regexh = /([-!$%^&*()_+|~±≈≠≡【〔「『】〕」』№٪‰–—‽=`{}\[\]:@×÷#";'<>?,.\/])/g;
    var resu = valx.replaceAll(regexh, "");
    $(this).val(resu);
});
</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM