2012-07-03 22 views
1

我只想在字符串中的任何位置包含数字和/或'h'或'H'字符时验证字符串。仅适用于数字的正则表达式仅加'h'字符

例如

123 - 有效
123H - 有效
11 H 23 - 有效
h234 - 有效
123H - 有效
ASDF - 无效
123D - 无效

我我能够限制字符串的数字而不是与h的额外要求。我怎样才能做到这一点?

回答

5
^\d*h?\d*$ 

与ignore case选项一起使用。

查阅here on Regexr

^锚字符串的开始。

\d*匹配0或多个数字

h?匹配0或1小时

\d*匹配0或多个数字

$锚固到字符串的末尾。

+0

谢谢。它的工作:) – deathrace

+0

这对于'12H'不适用于'H'的某处。 '^ \ d * h?H?\ d * $'将是正确的。 –

+0

@VishalSuthar确定它会工作。你读过我的解释还是尝试了regexr链接?你的将匹配1hH123 – stema

3

[0-9h]*将匹配任何数字0-9或h。要只允许一个,“h”可以使用[0-9]*h?[0-9]*(我假设你已经在做大小写不敏感)。您也可以像在[0-9]{1,2}h?[0-9]{1,2}中那样限制h周围的数字位数。

让我们得到真正的忘乎所以,并假设你想允许0-59被输入为分钟,或在小时和分钟格式分离“H”:

[0-9]{1,2}h[0-5]?[0-9]|[0-5]?[0-9] 
+0

类似这样的事情也会匹配'1hhhh23h',我认为这不是OP之后的事情。 – npinti

+0

不错。但我希望h只在字符串中出现一次。它会为此工作吗? – deathrace

+0

怎么样:'[0-9] * [hH]?[0-9] *'? – reuben

0

这是有效regerx :

^\d*h?H?\d*$ 

看吧:Regex Example

+0

这将匹配“hH”[Regexr](http://regexr.com?31dvj) – stema

0

使用本:

[^h]*h?[^h]*

这应该工作。

+0

不,这不行。它需要在字符串中有一个'h',并且'!“§$'#* +〜'也是有效的 – stema

+0

你是对的我纠正了我的答案 – Ria

+0

'h'现在是可选的否定字符类' [^ h]'仍然匹配每个不是'h'的字符,而且这个字符太多了。 – stema

相关问题