首页 文章

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

提问于
浏览
179

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

12 回答

  • 69

    试试这个......用#name ... a-z(a到z),A-Z(A到Z),0-9(0到9)替换你的字段ID

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

    甚至比 Gayan Dissanayake 更好地指出 .

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

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

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

  • 121

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

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

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

    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” .

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

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

  • 2

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

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

    用法:

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

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

    • 在所有大写字母中复制字符串

    • 以全小写形式制作第二个副本

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

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

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

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

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

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

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

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

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

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

  • 29

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

    /[^a-z\d]/i
    

    这是一个例子:

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

    注意 isValid 处的逻辑非运算符,因为我'm testing whether the string is false, not whether it'有效 .

  • 2

    使用单词character class . 以下等同于 ^[a-zA-Z0-9_]+$

    ^\w+$
    

    说明:

    • ^字符串的开头

    • \ w任何单词字符(A-Z,a-z,0-9,_) .

    • $字符串结束

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

  • 3

    这会奏效

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

    它只接受alphanumeriuc字符:
    test cases pased :

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

    or

    你也可以试试这个 . 这个表达式至少满足一个数字和一个字符,没有其他特殊字符

    ^(?=.*[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

    提及:Regular expression for alphanumeric in Angularjs

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

相关问题