Eu quero criar uma expressão regular de tal forma que apenas hipens e dígitos devem ser permitidos na caixa de texto que o critério é
- Hypen não deve entrar na primeira e última posição
- O Hypen deve ter dígitos nas duas extremidades
- Pode haver n número de hipens e dígitos na caixa de texto
desde já, obrigado
Respostas:
4 para resposta № 1Aqui está uma versão resumida do regex de @El Yobo. Você pode substituir [0-9]
com d
e você pode fazer o hifen opcional com -?
para remover o caso especial de cadeias sem hífen.
^d+(-?d+)*$
3 para resposta № 2
Essa expressão regular deve fazer isso:
^[0-9]+(-[0-9]+)*$
Isso corresponderá a um ou mais dígitos, que podem ser seguidos por zero ou mais seqüências de um hífen seguido por um ou mais dígitos.
2 para resposta № 3
Eu suponho que uma string vazia é válida. Eu não tenho certeza se entendi sua terceira cláusula; você quer dizer que n pode ser qualquer coisa, ou você tem que limitar coisas a ocorrências? Eu também não tenho certeza quantos dígitos precisam estar em cada extremidade de um hífen; é qualquer número um ou maior, ou exatamente um?
A regex a seguir permite uma string como 1-9-129-2-293-23, por exemplo.
^(([0-9]+-[0-9]+)|[0-9]+)*$
Como cada subpadrão deve iniciar e terminar com um dígito, não é necessário ter uma correspondência de dígito em cada extremidade fora da substring, como nas outras soluções postadas aqui.
2 para resposta № 4
^((d+-)+d+)*$
Ele diz: você deve começar com alguns dígitos, seguido por um -
. Repita quantas vezes quiser, então você deve terminar com mais alguns dígitos. que *
no final está lá para permitir seqüências vazias.
2 para resposta № 5
Isso funcionaria?
(d+-)*d+
Edit: Alterou "+" para "*" porque os hífens não parecem ser necessários.
Edit2: Corrigido o regex para evitar hífens duplos.
1 para resposta № 6
Eu não posso acreditar, eu consegui, dando um palpite na expressão regular, espero que isso funcione bem.
(d+(d*\-d+)+d*)|d+
-2 para resposta № 7
Você poderia tentar usar este regex: .[w-]*