接受自定义格式的正则表达式

时间:2018-01-25 19:31:36

标签: php regex

我需要验证一个字符串,该字符串可以采用以下格式:

0000000000-0000
1001
1001-1

应该验证的可能格式

XXXXXXXXXX-XXXX
XXXX 
XXXX-X

字符串中只需要数字,而 - 符号是可选的。 至少4位数(最多10位)然后是可选的 - 然后签名最多4位数(也是可选的)。

我尝试\d{4,}-?\d*,但如图here所示,它匹配1232-test,而不应该是-。整个字符串必须是数字和可选的<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/task_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" tools:context="com.task.TaskActivity"> <RelativeLayout android:id="@+id/task_header" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:background="#e4e4e4" android:padding="10dp"> <View android:id="@+id/view1" android:layout_width="fill_parent" android:layout_height="3dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:background="#000000" /> </RelativeLayout> <RelativeLayout android:id="@+id/task_content" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentStart="true" android:layout_below="@id/task_header" android:gravity="center"> <View android:id="@+id/myRectangleView" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginLeft="316dp" android:layout_marginStart="316dp" android:layout_marginTop="114dp" android:background="@drawable/rectangle" android:visibility="invisible" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="RtlHardcoded" /> </RelativeLayout> </RelativeLayout> 符号,没有别的。

以上所有内容都应该通过正则表达式,但没有别的。 我可以整天试着想出一些东西但是因为我从未深入研究正则表达式,所以我转向你们。

2 个答案:

答案 0 :(得分:2)

试试这个^\d{4,10}(?:-\d{1,4})?$

https://regex101.com/r/00GCtH/1

格式化

 ^                             # Begin of string
 \d{4,10}                      # Required 4 to 10 digits
 (?:                           # Optional dash and 1 to 4 digits
      - \d{1,4} 
 )?
 $                             # End of string

答案 1 :(得分:0)

您当前的正则表达式没问题,只需将行的开头和结尾添加到其中:

^\d{4,}-?\d*$

但是,如果您想将其限制在上限(最多10个,最多4个),则添加它们:

^\d{4,10}-?\d{0,4}$