【问题标题】:Regex to check existence of numbers and special characters only正则表达式仅检查数字和特殊字符的存在
【发布时间】:2015-07-16 12:03:47
【问题描述】:

我正在尝试允许用户注册用户名,只要其中不包含任何特殊字符(例如 $£*%&)或数字。

我做了以下工作,但它不允许非英文字符。也就是说,如果我输入一些像 विकिपी 这样的文本,那么它匹配的不是字母字符,这不是我想要的。

[^a-zA-Z0-9'-]+$

我想允许用户以他们想要的任何字母输入他们的用户名。所以他们可以使用英文字母或印地语或中文等。它应该只检查字符串是否存在数字和非字母字符。

是否有某种正则表达式范围可以匹配特殊字符?

澄清:我需要检查输入表单的用户名(字符串)中是否有任何数字和非字母字符,以便将其标记为无效。所以正则表达式需要查看字符串,如果它匹配一个数字或特殊字符,那么服务器将抛出一个错误。通过将它们标记为错误,我告诉用户只使用他们选择的语言字母表中的字符。

【问题讨论】:

  • [:alnum:] 应该没问题。
  • @MarounMaroun 我似乎无法做到这一点。我收到一条错误消息,提示 POSIX named classes are only supported within a character class
  • 那就试试[[:alnum:]]

标签: regex


【解决方案1】:

在 Coldfusion(Java) 中,您也可以使用 unicode 属性检查输入:

\\P{IsAlphabetic}

\\P{IsAlphabetic} 匹配任何 unicode 非字母。

示例:

boolean a = "विकिपीडिया".matches(".*?\\P{IsAlphabetic}.*"); // false
boolean b = "विकिपीडिया7".matches(".*?\\P{IsAlphabetic}.*"); // true
boolean c = "-विकिपीडिया".matches(".*?\\P{IsAlphabetic}.*"); // true

【讨论】:

  • 第一个不行。如果我输入一些非英语文本,例如विकिपीडिया,那么它会在不应该出现的情况下作为匹配出现。第二个我无法测试,因为我收到一个错误,说不完整的令牌。
  • 我使用的是基于 Java 的 ColdFusion。
  • 在 regex101 中尝试并输入一个像 7 这样的数字。它不匹配?
  • 好的,我认为我的问题令人困惑。我要澄清一下:我需要检查输入到表单中的用户名(字符串)是否有任何数字和非字母字符,以便将其标记为无效。所以正则表达式需要查看字符串,如果它匹配一个数字或特殊字符,那么服务器将抛出一个错误。通过将它们标记为错误,我告诉用户只使用他们选择的语言字母表中的字符。
  • 似乎工作得很好,谢谢anubhava。投票作为答案
猜你喜欢
  • 1970-01-01
  • 2022-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 2014-07-16
  • 1970-01-01
相关资源
最近更新 更多