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

Use*_*ser 218 javascript regex

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

Gre*_*reg 463

/^[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
Run Code Online (Sandbox Code Playgroud)

  • [az]与国际字符不匹配. (45认同)
  • @Greg,我很高兴您解释与正则表达式相关的答案.在我看来,没有解释的正则表达式是没用的.因为你得到那个一次性的"是的它可行"而且突然,当你需要改变它时,你会立即回来使用不同的用例,而不是真正了解正则表达式*的作用*.另外,比正则表达式文档更容易理解:P (33认同)
  • 哇 - 我认为我没有完全理解正则表达式,直到它以这种简单的方式被分解.谢谢! (20认同)
  • 另一种方式是`[^\W_]`但是`[a-z0-9]`/ i是一种显而易见的方式. (4认同)

Vol*_*ike 137

如果你想返回一个替换结果,那么这将有效:

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

这将返回:

Test123TEST
Run Code Online (Sandbox Code Playgroud)

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

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

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

Cha*_*ert 78

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

^\w+$
Run Code Online (Sandbox Code Playgroud)

说明:

  • ^字符串的开头
  • \ w任何单词字符(AZ,az,0-9,_).
  • $ end of string

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

  • \ w实际上等同于[a-zA-Z_0-9],因此您的RegEx也匹配下划线[_]. (20认同)

小智 34

/^([a-zA-Z0-9 _-]+)$/
Run Code Online (Sandbox Code Playgroud)

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


bdo*_*bro 18

对于多语言支持:

\n
var filtered = \'Hello \xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82 \xe4\xbd\xa0\xe5\xa5\xbd 123_456\'.match(/[\\p{L}\\p{N}\\s]/gu).join(\'\')\nconsole.log(filtered) // --> "Hello \xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82 \xe4\xbd\xa0\xe5\xa5\xbd 123456"\n
Run Code Online (Sandbox Code Playgroud)\n

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

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

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

\n


cle*_*tus 13

^\s*([0-9a-zA-Z]*)\s*$
Run Code Online (Sandbox Code Playgroud)

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

^\s*([0-9a-zA-Z]+)\s*$
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


小智 6

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

/[^a-z\d]/i    
Run Code Online (Sandbox Code Playgroud)

下面是一个例子:

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

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


Sku*_*ull 6

这会奏效

^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$
Run Code Online (Sandbox Code Playgroud)

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

dGgs1s23 - valid
12fUgdf  - valid,
121232   - invalid, 
abchfe   - invalid,
 abd()*  - invalid, 
42232^5$ - invalid
Run Code Online (Sandbox Code Playgroud)

要么

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

^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$
Run Code Online (Sandbox Code Playgroud)

在角度可以测试像:

$scope.str = '12fUgdf';
var pattern = new RegExp('^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$');
$scope.testResult = pattern.test($scope.str);
Run Code Online (Sandbox Code Playgroud)

PLUNKER DEMO

提到:Angularjs 中字母数字的正则表达式


Har*_*n O 5

我有类似于Samsung Galaxy A10s 6.2 英寸(2GB,32GB ROM)Android 9.0,(13MP+2MP)+ 8MP 双 SIM 4000mAh 4G LTE 智能手机 - 黑色(BF19)的字符串

以下是我所做的:

string.replace(/[^a-zA-Z0-9 ,._-]/g, '').split(',').join('-').split(' ').join('-').toLowerCase()
Run Code Online (Sandbox Code Playgroud)

请注意,我允许,._-使用split()和分别join()替换,to-和 space to -

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

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