【问题标题】:Regex to test if only ASCII characters [duplicate]正则表达式测试是否只有 ASCII 字符 [重复]
【发布时间】:2013-08-02 13:17:26
【问题描述】:

我已经尝试过了,但它对 UTF-8 和 ASCII 都返回 true:

 console.log(/[^w/]+/.test("abc123")) //true
 console.log(/[^w/]+/.test("ابت")) //true

【问题讨论】:

  • 请注意,您编写的正则表达式当前测试您的字符串不完全由 w/ 字符组成。您可能打算使用\w 而不是w/
  • 尝试使用^\w+$,你需要强制它匹配完整的字符串。 \w 应该只匹配 latin1。您可以使用 \W 进行反向匹配。

标签: javascript regex


【解决方案1】:

我认为您的意思是 /[^\w]+/,但据我所知,您真正想要的是:

console.log(/^[\x00-\x7F]+$/.test("abc123")) //true
console.log(/^[\x00-\x7F]+$/.test("abc_-8+")) //true
console.log(/^[\x00-\x7F]+$/.test("ابت")) //false

如果您实际上并不是要检查完整的 ASCII 集,您可以使用:

console.log(/^[\w]+$/.test("abc123")) //true
console.log(/^[\w]+$/.test("abc_-8+")) //false
console.log(/^[\w]+$/.test("ابت")) //false

关于 \x 表示法

\xFF 是此示例中使用的十六进制表示法(列表 here),用于范围 007F 以匹配完整的 ASCII 字符集。 \x00-\x7F 在功能上与 a-z 相同,因为它指定了一个范围,但是我们使用十六进制表示法来实现可靠的范围

\w 匹配 'word' 字符,与[a-z0-9_] 相同

【讨论】:

  • 这个/^[^a-zA-Z0-9]+$/怎么样
  • @Sami — 有很多不是字母或数字的 ASCII 字符。
  • @Sami 正如 Quentin 所说,这不是完整的 ASCII 字符集,请参阅我的更新答案
  • @Sami console.log(/^[\x00-\x7F]+$/.test("ابت")) 不返回真值 - 你从你没想到的东西中得到了什么?
  • 如果 OP 确实意味着检查 plain ASCII:有一个表达式:/^[[:ascii:]]+$/
猜你喜欢
  • 2013-08-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多