/ Expressão regular usando hipos e dígitos - regex, agnóstico de linguagem

Expressão regular usando hipos e dígitos - regex, agnóstico de linguagem

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 é

  1. Hypen não deve entrar na primeira e última posição
  2. O Hypen deve ter dígitos nas duas extremidades
  3. Pode haver n número de hipens e dígitos na caixa de texto

desde já, obrigado

Respostas:

4 para resposta № 1

Aqui 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+)*$

http://ideone.com/SRqPW


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-]*